// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

// Generated code. DO NOT EDIT!

namespace Google.Apis.ShoppingContent.v2_1
{
    /// <summary>The ShoppingContent Service.</summary>
    public class ShoppingContentService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v2.1";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed = Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public ShoppingContentService() : this(new Google.Apis.Services.BaseClientService.Initializer())
        {
        }

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public ShoppingContentService(Google.Apis.Services.BaseClientService.Initializer initializer) : base(initializer)
        {
            Accounts = new AccountsResource(this);
            Accountstatuses = new AccountstatusesResource(this);
            Accounttax = new AccounttaxResource(this);
            Collections = new CollectionsResource(this);
            Collectionstatuses = new CollectionstatusesResource(this);
            Conversionsources = new ConversionsourcesResource(this);
            Csses = new CssesResource(this);
            Datafeeds = new DatafeedsResource(this);
            Datafeedstatuses = new DatafeedstatusesResource(this);
            Freelistingsprogram = new FreelistingsprogramResource(this);
            Liasettings = new LiasettingsResource(this);
            Localinventory = new LocalinventoryResource(this);
            Merchantsupport = new MerchantsupportResource(this);
            Ordertrackingsignals = new OrdertrackingsignalsResource(this);
            Pos = new PosResource(this);
            Productdeliverytime = new ProductdeliverytimeResource(this);
            Products = new ProductsResource(this);
            Productstatuses = new ProductstatusesResource(this);
            Promotions = new PromotionsResource(this);
            Pubsubnotificationsettings = new PubsubnotificationsettingsResource(this);
            Quotas = new QuotasResource(this);
            Recommendations = new RecommendationsResource(this);
            Regionalinventory = new RegionalinventoryResource(this);
            Regions = new RegionsResource(this);
            Reports = new ReportsResource(this);
            Returnpolicyonline = new ReturnpolicyonlineResource(this);
            Shippingsettings = new ShippingsettingsResource(this);
            Shoppingadsprogram = new ShoppingadsprogramResource(this);
            BaseUri = GetEffectiveUri(BaseUriOverride, "https://shoppingcontent.googleapis.com/content/v2.1/");
            BatchUri = GetEffectiveUri(null, "https://shoppingcontent.googleapis.com/batch");
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features => new string[0];

        /// <summary>Gets the service name.</summary>
        public override string Name => "content";

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri { get; }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath => "content/v2.1/";

        /// <summary>Gets the batch base URI; <c>null</c> if unspecified.</summary>
        public override string BatchUri { get; }

        /// <summary>Gets the batch base path; <c>null</c> if unspecified.</summary>
        public override string BatchPath => "batch";

        /// <summary>Available OAuth 2.0 scopes for use with the Content API for Shopping.</summary>
        public class Scope
        {
            /// <summary>Manage your product listings and accounts for Google Shopping</summary>
            public static string Content = "https://www.googleapis.com/auth/content";
        }

        /// <summary>Available OAuth 2.0 scope constants for use with the Content API for Shopping.</summary>
        public static class ScopeConstants
        {
            /// <summary>Manage your product listings and accounts for Google Shopping</summary>
            public const string Content = "https://www.googleapis.com/auth/content";
        }

        /// <summary>Gets the Accounts resource.</summary>
        public virtual AccountsResource Accounts { get; }

        /// <summary>Gets the Accountstatuses resource.</summary>
        public virtual AccountstatusesResource Accountstatuses { get; }

        /// <summary>Gets the Accounttax resource.</summary>
        public virtual AccounttaxResource Accounttax { get; }

        /// <summary>Gets the Collections resource.</summary>
        public virtual CollectionsResource Collections { get; }

        /// <summary>Gets the Collectionstatuses resource.</summary>
        public virtual CollectionstatusesResource Collectionstatuses { get; }

        /// <summary>Gets the Conversionsources resource.</summary>
        public virtual ConversionsourcesResource Conversionsources { get; }

        /// <summary>Gets the Csses resource.</summary>
        public virtual CssesResource Csses { get; }

        /// <summary>Gets the Datafeeds resource.</summary>
        public virtual DatafeedsResource Datafeeds { get; }

        /// <summary>Gets the Datafeedstatuses resource.</summary>
        public virtual DatafeedstatusesResource Datafeedstatuses { get; }

        /// <summary>Gets the Freelistingsprogram resource.</summary>
        public virtual FreelistingsprogramResource Freelistingsprogram { get; }

        /// <summary>Gets the Liasettings resource.</summary>
        public virtual LiasettingsResource Liasettings { get; }

        /// <summary>Gets the Localinventory resource.</summary>
        public virtual LocalinventoryResource Localinventory { get; }

        /// <summary>Gets the Merchantsupport resource.</summary>
        public virtual MerchantsupportResource Merchantsupport { get; }

        /// <summary>Gets the Ordertrackingsignals resource.</summary>
        public virtual OrdertrackingsignalsResource Ordertrackingsignals { get; }

        /// <summary>Gets the Pos resource.</summary>
        public virtual PosResource Pos { get; }

        /// <summary>Gets the Productdeliverytime resource.</summary>
        public virtual ProductdeliverytimeResource Productdeliverytime { get; }

        /// <summary>Gets the Products resource.</summary>
        public virtual ProductsResource Products { get; }

        /// <summary>Gets the Productstatuses resource.</summary>
        public virtual ProductstatusesResource Productstatuses { get; }

        /// <summary>Gets the Promotions resource.</summary>
        public virtual PromotionsResource Promotions { get; }

        /// <summary>Gets the Pubsubnotificationsettings resource.</summary>
        public virtual PubsubnotificationsettingsResource Pubsubnotificationsettings { get; }

        /// <summary>Gets the Quotas resource.</summary>
        public virtual QuotasResource Quotas { get; }

        /// <summary>Gets the Recommendations resource.</summary>
        public virtual RecommendationsResource Recommendations { get; }

        /// <summary>Gets the Regionalinventory resource.</summary>
        public virtual RegionalinventoryResource Regionalinventory { get; }

        /// <summary>Gets the Regions resource.</summary>
        public virtual RegionsResource Regions { get; }

        /// <summary>Gets the Reports resource.</summary>
        public virtual ReportsResource Reports { get; }

        /// <summary>Gets the Returnpolicyonline resource.</summary>
        public virtual ReturnpolicyonlineResource Returnpolicyonline { get; }

        /// <summary>Gets the Shippingsettings resource.</summary>
        public virtual ShippingsettingsResource Shippingsettings { get; }

        /// <summary>Gets the Shoppingadsprogram resource.</summary>
        public virtual ShoppingadsprogramResource Shoppingadsprogram { get; }
    }

    /// <summary>A base abstract class for ShoppingContent requests.</summary>
    public abstract class ShoppingContentBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        /// <summary>Constructs a new ShoppingContentBaseServiceRequest instance.</summary>
        protected ShoppingContentBaseServiceRequest(Google.Apis.Services.IClientService service) : base(service)
        {
        }

        /// <summary>V1 error format.</summary>
        [Google.Apis.Util.RequestParameterAttribute("$.xgafv", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<XgafvEnum> Xgafv { get; set; }

        /// <summary>V1 error format.</summary>
        public enum XgafvEnum
        {
            /// <summary>v1 error format</summary>
            [Google.Apis.Util.StringValueAttribute("1")]
            Value1 = 0,

            /// <summary>v2 error format</summary>
            [Google.Apis.Util.StringValueAttribute("2")]
            Value2 = 1,
        }

        /// <summary>OAuth access token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("access_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string AccessToken { get; set; }

        /// <summary>Data format for response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json = 0,

            /// <summary>Media download with context-dependent Content-Type</summary>
            [Google.Apis.Util.StringValueAttribute("media")]
            Media = 1,

            /// <summary>Responses with Content-Type of application/x-protobuf</summary>
            [Google.Apis.Util.StringValueAttribute("proto")]
            Proto = 2,
        }

        /// <summary>JSONP</summary>
        [Google.Apis.Util.RequestParameterAttribute("callback", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Callback { get; set; }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>
        /// API key. Your API key identifies your project and provides you with API access, quota, and reports. Required
        /// unless you provide an OAuth 2.0 token.
        /// </summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>
        /// Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a
        /// user, but should not exceed 40 characters.
        /// </summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>Legacy upload protocol for media (e.g. "media", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("uploadType", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadType { get; set; }

        /// <summary>Upload protocol for media (e.g. "raw", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("upload_protocol", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadProtocol { get; set; }

        /// <summary>Initializes ShoppingContent parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();
            RequestParameters.Add("$.xgafv", new Google.Apis.Discovery.Parameter
            {
                Name = "$.xgafv",
                IsRequired = false,
                ParameterType = "query",
                DefaultValue = null,
                Pattern = null,
            });
            RequestParameters.Add("access_token", new Google.Apis.Discovery.Parameter
            {
                Name = "access_token",
                IsRequired = false,
                ParameterType = "query",
                DefaultValue = null,
                Pattern = null,
            });
            RequestParameters.Add("alt", new Google.Apis.Discovery.Parameter
            {
                Name = "alt",
                IsRequired = false,
                ParameterType = "query",
                DefaultValue = "json",
                Pattern = null,
            });
            RequestParameters.Add("callback", new Google.Apis.Discovery.Parameter
            {
                Name = "callback",
                IsRequired = false,
                ParameterType = "query",
                DefaultValue = null,
                Pattern = null,
            });
            RequestParameters.Add("fields", new Google.Apis.Discovery.Parameter
            {
                Name = "fields",
                IsRequired = false,
                ParameterType = "query",
                DefaultValue = null,
                Pattern = null,
            });
            RequestParameters.Add("key", new Google.Apis.Discovery.Parameter
            {
                Name = "key",
                IsRequired = false,
                ParameterType = "query",
                DefaultValue = null,
                Pattern = null,
            });
            RequestParameters.Add("oauth_token", new Google.Apis.Discovery.Parameter
            {
                Name = "oauth_token",
                IsRequired = false,
                ParameterType = "query",
                DefaultValue = null,
                Pattern = null,
            });
            RequestParameters.Add("prettyPrint", new Google.Apis.Discovery.Parameter
            {
                Name = "prettyPrint",
                IsRequired = false,
                ParameterType = "query",
                DefaultValue = "true",
                Pattern = null,
            });
            RequestParameters.Add("quotaUser", new Google.Apis.Discovery.Parameter
            {
                Name = "quotaUser",
                IsRequired = false,
                ParameterType = "query",
                DefaultValue = null,
                Pattern = null,
            });
            RequestParameters.Add("uploadType", new Google.Apis.Discovery.Parameter
            {
                Name = "uploadType",
                IsRequired = false,
                ParameterType = "query",
                DefaultValue = null,
                Pattern = null,
            });
            RequestParameters.Add("upload_protocol", new Google.Apis.Discovery.Parameter
            {
                Name = "upload_protocol",
                IsRequired = false,
                ParameterType = "query",
                DefaultValue = null,
                Pattern = null,
            });
        }
    }

    /// <summary>The "accounts" collection of methods.</summary>
    public class AccountsResource
    {
        private const string Resource = "accounts";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public AccountsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
            Credentials = new CredentialsResource(service);
            Labels = new LabelsResource(service);
            Returncarrier = new ReturncarrierResource(service);
        }

        /// <summary>Gets the Credentials resource.</summary>
        public virtual CredentialsResource Credentials { get; }

        /// <summary>The "credentials" collection of methods.</summary>
        public class CredentialsResource
        {
            private const string Resource = "credentials";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public CredentialsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;
            }

            /// <summary>
            /// Uploads credentials for the Merchant Center account. If credentials already exist for this Merchant
            /// Center account and purpose, this method updates them.
            /// </summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="accountId">Required. The merchant id of the account these credentials belong to.</param>
            public virtual CreateRequest Create(Google.Apis.ShoppingContent.v2_1.Data.AccountCredentials body, long accountId)
            {
                return new CreateRequest(this.service, body, accountId);
            }

            /// <summary>
            /// Uploads credentials for the Merchant Center account. If credentials already exist for this Merchant
            /// Center account and purpose, this method updates them.
            /// </summary>
            public class CreateRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.AccountCredentials>
            {
                /// <summary>Constructs a new Create request.</summary>
                public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.AccountCredentials body, long accountId) : base(service)
                {
                    AccountId = accountId;
                    Body = body;
                    InitParameters();
                }

                /// <summary>Required. The merchant id of the account these credentials belong to.</summary>
                [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual long AccountId { get; private set; }

                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.ShoppingContent.v2_1.Data.AccountCredentials Body { get; set; }

                /// <summary>Returns the body of the request.</summary>
                protected override object GetBody() => Body;

                /// <summary>Gets the method name.</summary>
                public override string MethodName => "create";

                /// <summary>Gets the HTTP method.</summary>
                public override string HttpMethod => "POST";

                /// <summary>Gets the REST path.</summary>
                public override string RestPath => "accounts/{accountId}/credentials";

                /// <summary>Initializes Create parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();
                    RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "accountId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                }
            }
        }

        /// <summary>Gets the Labels resource.</summary>
        public virtual LabelsResource Labels { get; }

        /// <summary>The "labels" collection of methods.</summary>
        public class LabelsResource
        {
            private const string Resource = "labels";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public LabelsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;
            }

            /// <summary>Creates a new label, not assigned to any account.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="accountId">Required. The id of the account this label belongs to.</param>
            public virtual CreateRequest Create(Google.Apis.ShoppingContent.v2_1.Data.AccountLabel body, long accountId)
            {
                return new CreateRequest(this.service, body, accountId);
            }

            /// <summary>Creates a new label, not assigned to any account.</summary>
            public class CreateRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.AccountLabel>
            {
                /// <summary>Constructs a new Create request.</summary>
                public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.AccountLabel body, long accountId) : base(service)
                {
                    AccountId = accountId;
                    Body = body;
                    InitParameters();
                }

                /// <summary>Required. The id of the account this label belongs to.</summary>
                [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual long AccountId { get; private set; }

                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.ShoppingContent.v2_1.Data.AccountLabel Body { get; set; }

                /// <summary>Returns the body of the request.</summary>
                protected override object GetBody() => Body;

                /// <summary>Gets the method name.</summary>
                public override string MethodName => "create";

                /// <summary>Gets the HTTP method.</summary>
                public override string HttpMethod => "POST";

                /// <summary>Gets the REST path.</summary>
                public override string RestPath => "accounts/{accountId}/labels";

                /// <summary>Initializes Create parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();
                    RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "accountId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                }
            }

            /// <summary>Deletes a label and removes it from all accounts to which it was assigned.</summary>
            /// <param name="accountId">Required. The id of the account that owns the label.</param>
            /// <param name="labelId">Required. The id of the label to delete.</param>
            public virtual DeleteRequest Delete(long accountId, long labelId)
            {
                return new DeleteRequest(this.service, accountId, labelId);
            }

            /// <summary>Deletes a label and removes it from all accounts to which it was assigned.</summary>
            public class DeleteRequest : ShoppingContentBaseServiceRequest<string>
            {
                /// <summary>Constructs a new Delete request.</summary>
                public DeleteRequest(Google.Apis.Services.IClientService service, long accountId, long labelId) : base(service)
                {
                    AccountId = accountId;
                    LabelId = labelId;
                    InitParameters();
                }

                /// <summary>Required. The id of the account that owns the label.</summary>
                [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual long AccountId { get; private set; }

                /// <summary>Required. The id of the label to delete.</summary>
                [Google.Apis.Util.RequestParameterAttribute("labelId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual long LabelId { get; private set; }

                /// <summary>Gets the method name.</summary>
                public override string MethodName => "delete";

                /// <summary>Gets the HTTP method.</summary>
                public override string HttpMethod => "DELETE";

                /// <summary>Gets the REST path.</summary>
                public override string RestPath => "accounts/{accountId}/labels/{labelId}";

                /// <summary>Initializes Delete parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();
                    RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "accountId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                    RequestParameters.Add("labelId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "labelId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                }
            }

            /// <summary>Lists the labels assigned to an account.</summary>
            /// <param name="accountId">Required. The account id for whose labels are to be listed.</param>
            public virtual ListRequest List(long accountId)
            {
                return new ListRequest(this.service, accountId);
            }

            /// <summary>Lists the labels assigned to an account.</summary>
            public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ListAccountLabelsResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, long accountId) : base(service)
                {
                    AccountId = accountId;
                    InitParameters();
                }

                /// <summary>Required. The account id for whose labels are to be listed.</summary>
                [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual long AccountId { get; private set; }

                /// <summary>
                /// The maximum number of labels to return. The service may return fewer than this value. If
                /// unspecified, at most 50 labels will be returned. The maximum value is 1000; values above 1000 will
                /// be coerced to 1000.
                /// </summary>
                [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<int> PageSize { get; set; }

                /// <summary>
                /// A page token, received from a previous `ListAccountLabels` call. Provide this to retrieve the
                /// subsequent page. When paginating, all other parameters provided to `ListAccountLabels` must match
                /// the call that provided the page token.
                /// </summary>
                [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string PageToken { get; set; }

                /// <summary>Gets the method name.</summary>
                public override string MethodName => "list";

                /// <summary>Gets the HTTP method.</summary>
                public override string HttpMethod => "GET";

                /// <summary>Gets the REST path.</summary>
                public override string RestPath => "accounts/{accountId}/labels";

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();
                    RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "accountId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                    RequestParameters.Add("pageSize", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageSize",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                    RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                }
            }

            /// <summary>Updates a label.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="accountId">Required. The id of the account this label belongs to.</param>
            /// <param name="labelId">Required. The id of the label to update.</param>
            public virtual PatchRequest Patch(Google.Apis.ShoppingContent.v2_1.Data.AccountLabel body, long accountId, long labelId)
            {
                return new PatchRequest(this.service, body, accountId, labelId);
            }

            /// <summary>Updates a label.</summary>
            public class PatchRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.AccountLabel>
            {
                /// <summary>Constructs a new Patch request.</summary>
                public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.AccountLabel body, long accountId, long labelId) : base(service)
                {
                    AccountId = accountId;
                    LabelId = labelId;
                    Body = body;
                    InitParameters();
                }

                /// <summary>Required. The id of the account this label belongs to.</summary>
                [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual long AccountId { get; private set; }

                /// <summary>Required. The id of the label to update.</summary>
                [Google.Apis.Util.RequestParameterAttribute("labelId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual long LabelId { get; private set; }

                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.ShoppingContent.v2_1.Data.AccountLabel Body { get; set; }

                /// <summary>Returns the body of the request.</summary>
                protected override object GetBody() => Body;

                /// <summary>Gets the method name.</summary>
                public override string MethodName => "patch";

                /// <summary>Gets the HTTP method.</summary>
                public override string HttpMethod => "PATCH";

                /// <summary>Gets the REST path.</summary>
                public override string RestPath => "accounts/{accountId}/labels/{labelId}";

                /// <summary>Initializes Patch parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();
                    RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "accountId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                    RequestParameters.Add("labelId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "labelId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                }
            }
        }

        /// <summary>Gets the Returncarrier resource.</summary>
        public virtual ReturncarrierResource Returncarrier { get; }

        /// <summary>The "returncarrier" collection of methods.</summary>
        public class ReturncarrierResource
        {
            private const string Resource = "returncarrier";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public ReturncarrierResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;
            }

            /// <summary>Links return carrier to a merchant account.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="accountId">
            /// Required. The Merchant Center Account Id under which the Return Carrier is to be linked.
            /// </param>
            public virtual CreateRequest Create(Google.Apis.ShoppingContent.v2_1.Data.AccountReturnCarrier body, long accountId)
            {
                return new CreateRequest(this.service, body, accountId);
            }

            /// <summary>Links return carrier to a merchant account.</summary>
            public class CreateRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.AccountReturnCarrier>
            {
                /// <summary>Constructs a new Create request.</summary>
                public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.AccountReturnCarrier body, long accountId) : base(service)
                {
                    AccountId = accountId;
                    Body = body;
                    InitParameters();
                }

                /// <summary>
                /// Required. The Merchant Center Account Id under which the Return Carrier is to be linked.
                /// </summary>
                [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual long AccountId { get; private set; }

                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.ShoppingContent.v2_1.Data.AccountReturnCarrier Body { get; set; }

                /// <summary>Returns the body of the request.</summary>
                protected override object GetBody() => Body;

                /// <summary>Gets the method name.</summary>
                public override string MethodName => "create";

                /// <summary>Gets the HTTP method.</summary>
                public override string HttpMethod => "POST";

                /// <summary>Gets the REST path.</summary>
                public override string RestPath => "accounts/{accountId}/returncarrier";

                /// <summary>Initializes Create parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();
                    RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "accountId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                }
            }

            /// <summary>Delete a return carrier in the merchant account.</summary>
            /// <param name="accountId">
            /// Required. The Merchant Center Account Id under which the Return Carrier is to be linked.
            /// </param>
            /// <param name="carrierAccountId">
            /// Required. The Google-provided unique carrier ID, used to update the resource.
            /// </param>
            public virtual DeleteRequest Delete(long accountId, long carrierAccountId)
            {
                return new DeleteRequest(this.service, accountId, carrierAccountId);
            }

            /// <summary>Delete a return carrier in the merchant account.</summary>
            public class DeleteRequest : ShoppingContentBaseServiceRequest<string>
            {
                /// <summary>Constructs a new Delete request.</summary>
                public DeleteRequest(Google.Apis.Services.IClientService service, long accountId, long carrierAccountId) : base(service)
                {
                    AccountId = accountId;
                    CarrierAccountId = carrierAccountId;
                    InitParameters();
                }

                /// <summary>
                /// Required. The Merchant Center Account Id under which the Return Carrier is to be linked.
                /// </summary>
                [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual long AccountId { get; private set; }

                /// <summary>Required. The Google-provided unique carrier ID, used to update the resource.</summary>
                [Google.Apis.Util.RequestParameterAttribute("carrierAccountId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual long CarrierAccountId { get; private set; }

                /// <summary>Gets the method name.</summary>
                public override string MethodName => "delete";

                /// <summary>Gets the HTTP method.</summary>
                public override string HttpMethod => "DELETE";

                /// <summary>Gets the REST path.</summary>
                public override string RestPath => "accounts/{accountId}/returncarrier/{carrierAccountId}";

                /// <summary>Initializes Delete parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();
                    RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "accountId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                    RequestParameters.Add("carrierAccountId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "carrierAccountId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                }
            }

            /// <summary>Lists available return carriers in the merchant account.</summary>
            /// <param name="accountId">
            /// Required. The Merchant Center Account Id under which the Return Carrier is to be linked.
            /// </param>
            public virtual ListRequest List(long accountId)
            {
                return new ListRequest(this.service, accountId);
            }

            /// <summary>Lists available return carriers in the merchant account.</summary>
            public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ListAccountReturnCarrierResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, long accountId) : base(service)
                {
                    AccountId = accountId;
                    InitParameters();
                }

                /// <summary>
                /// Required. The Merchant Center Account Id under which the Return Carrier is to be linked.
                /// </summary>
                [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual long AccountId { get; private set; }

                /// <summary>Gets the method name.</summary>
                public override string MethodName => "list";

                /// <summary>Gets the HTTP method.</summary>
                public override string HttpMethod => "GET";

                /// <summary>Gets the REST path.</summary>
                public override string RestPath => "accounts/{accountId}/returncarrier";

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();
                    RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "accountId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                }
            }

            /// <summary>Updates a return carrier in the merchant account.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="accountId">
            /// Required. The Merchant Center Account Id under which the Return Carrier is to be linked.
            /// </param>
            /// <param name="carrierAccountId">
            /// Required. The Google-provided unique carrier ID, used to update the resource.
            /// </param>
            public virtual PatchRequest Patch(Google.Apis.ShoppingContent.v2_1.Data.AccountReturnCarrier body, long accountId, long carrierAccountId)
            {
                return new PatchRequest(this.service, body, accountId, carrierAccountId);
            }

            /// <summary>Updates a return carrier in the merchant account.</summary>
            public class PatchRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.AccountReturnCarrier>
            {
                /// <summary>Constructs a new Patch request.</summary>
                public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.AccountReturnCarrier body, long accountId, long carrierAccountId) : base(service)
                {
                    AccountId = accountId;
                    CarrierAccountId = carrierAccountId;
                    Body = body;
                    InitParameters();
                }

                /// <summary>
                /// Required. The Merchant Center Account Id under which the Return Carrier is to be linked.
                /// </summary>
                [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual long AccountId { get; private set; }

                /// <summary>Required. The Google-provided unique carrier ID, used to update the resource.</summary>
                [Google.Apis.Util.RequestParameterAttribute("carrierAccountId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual long CarrierAccountId { get; private set; }

                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.ShoppingContent.v2_1.Data.AccountReturnCarrier Body { get; set; }

                /// <summary>Returns the body of the request.</summary>
                protected override object GetBody() => Body;

                /// <summary>Gets the method name.</summary>
                public override string MethodName => "patch";

                /// <summary>Gets the HTTP method.</summary>
                public override string HttpMethod => "PATCH";

                /// <summary>Gets the REST path.</summary>
                public override string RestPath => "accounts/{accountId}/returncarrier/{carrierAccountId}";

                /// <summary>Initializes Patch parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();
                    RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "accountId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                    RequestParameters.Add("carrierAccountId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "carrierAccountId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                }
            }
        }

        /// <summary>Returns information about the authenticated user.</summary>
        public virtual AuthinfoRequest Authinfo()
        {
            return new AuthinfoRequest(this.service);
        }

        /// <summary>Returns information about the authenticated user.</summary>
        public class AuthinfoRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.AccountsAuthInfoResponse>
        {
            /// <summary>Constructs a new Authinfo request.</summary>
            public AuthinfoRequest(Google.Apis.Services.IClientService service) : base(service)
            {
                InitParameters();
            }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "authinfo";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "accounts/authinfo";

            /// <summary>Initializes Authinfo parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
            }
        }

        /// <summary>
        /// Claims the website of a Merchant Center sub-account. Merchant accounts with approved third-party CSSs aren't
        /// required to claim a website.
        /// </summary>
        /// <param name="merchantId">
        /// The ID of the managing account. If this parameter is not the same as accountId, then this account must be a
        /// multi-client account and `accountId` must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">The ID of the account whose website is claimed.</param>
        public virtual ClaimwebsiteRequest Claimwebsite(ulong merchantId, ulong accountId)
        {
            return new ClaimwebsiteRequest(this.service, merchantId, accountId);
        }

        /// <summary>
        /// Claims the website of a Merchant Center sub-account. Merchant accounts with approved third-party CSSs aren't
        /// required to claim a website.
        /// </summary>
        public class ClaimwebsiteRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.AccountsClaimWebsiteResponse>
        {
            /// <summary>Constructs a new Claimwebsite request.</summary>
            public ClaimwebsiteRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong accountId) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the managing account. If this parameter is not the same as accountId, then this account must
            /// be a multi-client account and `accountId` must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account whose website is claimed.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>
            /// Only available to selected merchants, for example multi-client accounts (MCAs) and their sub-accounts.
            /// When set to `True`, this option removes any existing claim on the requested website and replaces it with
            /// a claim from the account that makes the request.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("overwrite", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> Overwrite { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "claimwebsite";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/accounts/{accountId}/claimwebsite";

            /// <summary>Initializes Claimwebsite parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("overwrite", new Google.Apis.Discovery.Parameter
                {
                    Name = "overwrite",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Retrieves, inserts, updates, and deletes multiple Merchant Center (sub-)accounts in a single request.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        public virtual CustombatchRequest Custombatch(Google.Apis.ShoppingContent.v2_1.Data.AccountsCustomBatchRequest body)
        {
            return new CustombatchRequest(this.service, body);
        }

        /// <summary>
        /// Retrieves, inserts, updates, and deletes multiple Merchant Center (sub-)accounts in a single request.
        /// </summary>
        public class CustombatchRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.AccountsCustomBatchResponse>
        {
            /// <summary>Constructs a new Custombatch request.</summary>
            public CustombatchRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.AccountsCustomBatchRequest body) : base(service)
            {
                Body = body;
                InitParameters();
            }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.AccountsCustomBatchRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "custombatch";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "accounts/batch";

            /// <summary>Initializes Custombatch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
            }
        }

        /// <summary>Deletes a Merchant Center sub-account.</summary>
        /// <param name="merchantId">
        /// The ID of the managing account. This must be a multi-client account, and accountId must be the ID of a
        /// sub-account of this account.
        /// </param>
        /// <param name="accountId">The ID of the account.</param>
        public virtual DeleteRequest Delete(ulong merchantId, ulong accountId)
        {
            return new DeleteRequest(this.service, merchantId, accountId);
        }

        /// <summary>Deletes a Merchant Center sub-account.</summary>
        public class DeleteRequest : ShoppingContentBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong accountId) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the managing account. This must be a multi-client account, and accountId must be the ID of a
            /// sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>Option to delete sub-accounts with products. The default value is false.</summary>
            [Google.Apis.Util.RequestParameterAttribute("force", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> Force { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "delete";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "DELETE";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/accounts/{accountId}";

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("force", new Google.Apis.Discovery.Parameter
                {
                    Name = "force",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "false",
                    Pattern = null,
                });
            }
        }

        /// <summary>Retrieves a Merchant Center account.</summary>
        /// <param name="merchantId">
        /// The ID of the managing account. If this parameter is not the same as accountId, then this account must be a
        /// multi-client account and `accountId` must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">The ID of the account.</param>
        public virtual GetRequest Get(ulong merchantId, ulong accountId)
        {
            return new GetRequest(this.service, merchantId, accountId);
        }

        /// <summary>Retrieves a Merchant Center account.</summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.Account>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong accountId) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the managing account. If this parameter is not the same as accountId, then this account must
            /// be a multi-client account and `accountId` must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>
            /// Controls which fields will be populated. Acceptable values are: "merchant" and "css". The default value
            /// is "merchant".
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<ViewEnum> View { get; set; }

            /// <summary>
            /// Controls which fields will be populated. Acceptable values are: "merchant" and "css". The default value
            /// is "merchant".
            /// </summary>
            public enum ViewEnum
            {
                /// <summary>Default. View is populated with Merchant Center fields.</summary>
                [Google.Apis.Util.StringValueAttribute("MERCHANT")]
                MERCHANT = 0,

                /// <summary>View is populated with Comparison Shopping Services fields.</summary>
                [Google.Apis.Util.StringValueAttribute("CSS")]
                CSS = 1,
            }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/accounts/{accountId}";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("view", new Google.Apis.Discovery.Parameter
                {
                    Name = "view",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Creates a Merchant Center sub-account.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">The ID of the managing account. This must be a multi-client account.</param>
        public virtual InsertRequest Insert(Google.Apis.ShoppingContent.v2_1.Data.Account body, ulong merchantId)
        {
            return new InsertRequest(this.service, body, merchantId);
        }

        /// <summary>Creates a Merchant Center sub-account.</summary>
        public class InsertRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.Account>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.Account body, ulong merchantId) : base(service)
            {
                MerchantId = merchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>The ID of the managing account. This must be a multi-client account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.Account Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "insert";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/accounts";

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Performs an action on a link between two Merchant Center accounts, namely accountId and linkedAccountId.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">
        /// The ID of the managing account. If this parameter is not the same as accountId, then this account must be a
        /// multi-client account and `accountId` must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">The ID of the account that should be linked.</param>
        public virtual LinkRequest Link(Google.Apis.ShoppingContent.v2_1.Data.AccountsLinkRequest body, ulong merchantId, ulong accountId)
        {
            return new LinkRequest(this.service, body, merchantId, accountId);
        }

        /// <summary>
        /// Performs an action on a link between two Merchant Center accounts, namely accountId and linkedAccountId.
        /// </summary>
        public class LinkRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.AccountsLinkResponse>
        {
            /// <summary>Constructs a new Link request.</summary>
            public LinkRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.AccountsLinkRequest body, ulong merchantId, ulong accountId) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                Body = body;
                InitParameters();
            }

            /// <summary>
            /// The ID of the managing account. If this parameter is not the same as accountId, then this account must
            /// be a multi-client account and `accountId` must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account that should be linked.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.AccountsLinkRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "link";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/accounts/{accountId}/link";

            /// <summary>Initializes Link parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Lists the sub-accounts in your Merchant Center account.</summary>
        /// <param name="merchantId">The ID of the managing account. This must be a multi-client account.</param>
        public virtual ListRequest List(ulong merchantId)
        {
            return new ListRequest(this.service, merchantId);
        }

        /// <summary>Lists the sub-accounts in your Merchant Center account.</summary>
        public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.AccountsListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, ulong merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>The ID of the managing account. This must be a multi-client account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>If view is set to "css", only return accounts that are assigned label with given ID.</summary>
            [Google.Apis.Util.RequestParameterAttribute("label", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<ulong> Label { get; set; }

            /// <summary>The maximum number of accounts to return in the response, used for paging.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>If set, only the accounts with the given name (case sensitive) will be returned.</summary>
            [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Name { get; set; }

            /// <summary>The token returned by the previous request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>
            /// Controls which fields will be populated. Acceptable values are: "merchant" and "css". The default value
            /// is "merchant".
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("view", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<ViewEnum> View { get; set; }

            /// <summary>
            /// Controls which fields will be populated. Acceptable values are: "merchant" and "css". The default value
            /// is "merchant".
            /// </summary>
            public enum ViewEnum
            {
                /// <summary>Default. View is populated with Merchant Center fields.</summary>
                [Google.Apis.Util.StringValueAttribute("MERCHANT")]
                MERCHANT = 0,

                /// <summary>View is populated with Comparison Shopping Services fields.</summary>
                [Google.Apis.Util.StringValueAttribute("CSS")]
                CSS = 1,
            }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "list";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/accounts";

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("label", new Google.Apis.Discovery.Parameter
                {
                    Name = "label",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("maxResults", new Google.Apis.Discovery.Parameter
                {
                    Name = "maxResults",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("name", new Google.Apis.Discovery.Parameter
                {
                    Name = "name",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageToken",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("view", new Google.Apis.Discovery.Parameter
                {
                    Name = "view",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Returns the list of accounts linked to your Merchant Center account.</summary>
        /// <param name="merchantId">
        /// The ID of the managing account. If this parameter is not the same as accountId, then this account must be a
        /// multi-client account and `accountId` must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">The ID of the account for which to list links.</param>
        public virtual ListlinksRequest Listlinks(ulong merchantId, ulong accountId)
        {
            return new ListlinksRequest(this.service, merchantId, accountId);
        }

        /// <summary>Returns the list of accounts linked to your Merchant Center account.</summary>
        public class ListlinksRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.AccountsListLinksResponse>
        {
            /// <summary>Constructs a new Listlinks request.</summary>
            public ListlinksRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong accountId) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the managing account. If this parameter is not the same as accountId, then this account must
            /// be a multi-client account and `accountId` must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account for which to list links.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>
            /// The maximum number of links to return in the response, used for pagination. The minimum allowed value is
            /// 5 results per page. If provided value is lower than 5, it will be automatically increased to 5.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>The token returned by the previous request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "listlinks";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/accounts/{accountId}/listlinks";

            /// <summary>Initializes Listlinks parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("maxResults", new Google.Apis.Discovery.Parameter
                {
                    Name = "maxResults",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageToken",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Request verification code to start phone verification.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">
        /// Required. The ID of the managing account. If this parameter is not the same as accountId, then this account
        /// must be a multi-client account and accountId must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">Required. The ID of the account.</param>
        public virtual RequestphoneverificationRequest Requestphoneverification(Google.Apis.ShoppingContent.v2_1.Data.RequestPhoneVerificationRequest body, long merchantId, long accountId)
        {
            return new RequestphoneverificationRequest(this.service, body, merchantId, accountId);
        }

        /// <summary>Request verification code to start phone verification.</summary>
        public class RequestphoneverificationRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.RequestPhoneVerificationResponse>
        {
            /// <summary>Constructs a new Requestphoneverification request.</summary>
            public RequestphoneverificationRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.RequestPhoneVerificationRequest body, long merchantId, long accountId) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                Body = body;
                InitParameters();
            }

            /// <summary>
            /// Required. The ID of the managing account. If this parameter is not the same as accountId, then this
            /// account must be a multi-client account and accountId must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Required. The ID of the account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long AccountId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.RequestPhoneVerificationRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "requestphoneverification";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/accounts/{accountId}/requestphoneverification";

            /// <summary>Initializes Requestphoneverification parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Updates a Merchant Center account. Any fields that are not provided are deleted from the resource.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">
        /// The ID of the managing account. If this parameter is not the same as accountId, then this account must be a
        /// multi-client account and `accountId` must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">The ID of the account.</param>
        public virtual UpdateRequest Update(Google.Apis.ShoppingContent.v2_1.Data.Account body, ulong merchantId, ulong accountId)
        {
            return new UpdateRequest(this.service, body, merchantId, accountId);
        }

        /// <summary>
        /// Updates a Merchant Center account. Any fields that are not provided are deleted from the resource.
        /// </summary>
        public class UpdateRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.Account>
        {
            /// <summary>Constructs a new Update request.</summary>
            public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.Account body, ulong merchantId, ulong accountId) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                Body = body;
                InitParameters();
            }

            /// <summary>
            /// The ID of the managing account. If this parameter is not the same as accountId, then this account must
            /// be a multi-client account and `accountId` must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.Account Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "update";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "PUT";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/accounts/{accountId}";

            /// <summary>Initializes Update parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Updates labels that are assigned to the Merchant Center account by CSS user.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">The ID of the managing account.</param>
        /// <param name="accountId">The ID of the account whose labels are updated.</param>
        public virtual UpdatelabelsRequest Updatelabels(Google.Apis.ShoppingContent.v2_1.Data.AccountsUpdateLabelsRequest body, ulong merchantId, ulong accountId)
        {
            return new UpdatelabelsRequest(this.service, body, merchantId, accountId);
        }

        /// <summary>Updates labels that are assigned to the Merchant Center account by CSS user.</summary>
        public class UpdatelabelsRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.AccountsUpdateLabelsResponse>
        {
            /// <summary>Constructs a new Updatelabels request.</summary>
            public UpdatelabelsRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.AccountsUpdateLabelsRequest body, ulong merchantId, ulong accountId) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                Body = body;
                InitParameters();
            }

            /// <summary>The ID of the managing account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account whose labels are updated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.AccountsUpdateLabelsRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "updatelabels";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/accounts/{accountId}/updatelabels";

            /// <summary>Initializes Updatelabels parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Validates verification code to verify phone number for the account. If successful this will overwrite the
        /// value of `accounts.businessinformation.phoneNumber`. Only verified phone number will replace an existing
        /// verified phone number.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">
        /// Required. The ID of the managing account. If this parameter is not the same as accountId, then this account
        /// must be a multi-client account and accountId must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">Required. The ID of the account.</param>
        public virtual VerifyphonenumberRequest Verifyphonenumber(Google.Apis.ShoppingContent.v2_1.Data.VerifyPhoneNumberRequest body, long merchantId, long accountId)
        {
            return new VerifyphonenumberRequest(this.service, body, merchantId, accountId);
        }

        /// <summary>
        /// Validates verification code to verify phone number for the account. If successful this will overwrite the
        /// value of `accounts.businessinformation.phoneNumber`. Only verified phone number will replace an existing
        /// verified phone number.
        /// </summary>
        public class VerifyphonenumberRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.VerifyPhoneNumberResponse>
        {
            /// <summary>Constructs a new Verifyphonenumber request.</summary>
            public VerifyphonenumberRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.VerifyPhoneNumberRequest body, long merchantId, long accountId) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                Body = body;
                InitParameters();
            }

            /// <summary>
            /// Required. The ID of the managing account. If this parameter is not the same as accountId, then this
            /// account must be a multi-client account and accountId must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Required. The ID of the account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long AccountId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.VerifyPhoneNumberRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "verifyphonenumber";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/accounts/{accountId}/verifyphonenumber";

            /// <summary>Initializes Verifyphonenumber parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "accountstatuses" collection of methods.</summary>
    public class AccountstatusesResource
    {
        private const string Resource = "accountstatuses";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public AccountstatusesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Retrieves multiple Merchant Center account statuses in a single request.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CustombatchRequest Custombatch(Google.Apis.ShoppingContent.v2_1.Data.AccountstatusesCustomBatchRequest body)
        {
            return new CustombatchRequest(this.service, body);
        }

        /// <summary>Retrieves multiple Merchant Center account statuses in a single request.</summary>
        public class CustombatchRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.AccountstatusesCustomBatchResponse>
        {
            /// <summary>Constructs a new Custombatch request.</summary>
            public CustombatchRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.AccountstatusesCustomBatchRequest body) : base(service)
            {
                Body = body;
                InitParameters();
            }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.AccountstatusesCustomBatchRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "custombatch";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "accountstatuses/batch";

            /// <summary>Initializes Custombatch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
            }
        }

        /// <summary>
        /// Retrieves the status of a Merchant Center account. No itemLevelIssues are returned for multi-client
        /// accounts.
        /// </summary>
        /// <param name="merchantId">
        /// The ID of the managing account. If this parameter is not the same as accountId, then this account must be a
        /// multi-client account and `accountId` must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">The ID of the account.</param>
        public virtual GetRequest Get(ulong merchantId, ulong accountId)
        {
            return new GetRequest(this.service, merchantId, accountId);
        }

        /// <summary>
        /// Retrieves the status of a Merchant Center account. No itemLevelIssues are returned for multi-client
        /// accounts.
        /// </summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.AccountStatus>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong accountId) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the managing account. If this parameter is not the same as accountId, then this account must
            /// be a multi-client account and `accountId` must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>
            /// If set, only issues for the specified destinations are returned, otherwise only issues for the Shopping
            /// destination.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("destinations", Google.Apis.Util.RequestParameterType.Query)]
            public virtual Google.Apis.Util.Repeatable<string> Destinations { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/accountstatuses/{accountId}";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("destinations", new Google.Apis.Discovery.Parameter
                {
                    Name = "destinations",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Lists the statuses of the sub-accounts in your Merchant Center account.</summary>
        /// <param name="merchantId">The ID of the managing account. This must be a multi-client account.</param>
        public virtual ListRequest List(ulong merchantId)
        {
            return new ListRequest(this.service, merchantId);
        }

        /// <summary>Lists the statuses of the sub-accounts in your Merchant Center account.</summary>
        public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.AccountstatusesListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, ulong merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>The ID of the managing account. This must be a multi-client account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>
            /// If set, only issues for the specified destinations are returned, otherwise only issues for the Shopping
            /// destination.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("destinations", Google.Apis.Util.RequestParameterType.Query)]
            public virtual Google.Apis.Util.Repeatable<string> Destinations { get; set; }

            /// <summary>The maximum number of account statuses to return in the response, used for paging.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>If set, only the accounts with the given name (case sensitive) will be returned.</summary>
            [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Name { get; set; }

            /// <summary>The token returned by the previous request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "list";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/accountstatuses";

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("destinations", new Google.Apis.Discovery.Parameter
                {
                    Name = "destinations",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("maxResults", new Google.Apis.Discovery.Parameter
                {
                    Name = "maxResults",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("name", new Google.Apis.Discovery.Parameter
                {
                    Name = "name",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageToken",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "accounttax" collection of methods.</summary>
    public class AccounttaxResource
    {
        private const string Resource = "accounttax";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public AccounttaxResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Retrieves and updates tax settings of multiple accounts in a single request.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CustombatchRequest Custombatch(Google.Apis.ShoppingContent.v2_1.Data.AccounttaxCustomBatchRequest body)
        {
            return new CustombatchRequest(this.service, body);
        }

        /// <summary>Retrieves and updates tax settings of multiple accounts in a single request.</summary>
        public class CustombatchRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.AccounttaxCustomBatchResponse>
        {
            /// <summary>Constructs a new Custombatch request.</summary>
            public CustombatchRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.AccounttaxCustomBatchRequest body) : base(service)
            {
                Body = body;
                InitParameters();
            }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.AccounttaxCustomBatchRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "custombatch";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "accounttax/batch";

            /// <summary>Initializes Custombatch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
            }
        }

        /// <summary>Retrieves the tax settings of the account.</summary>
        /// <param name="merchantId">
        /// The ID of the managing account. If this parameter is not the same as accountId, then this account must be a
        /// multi-client account and `accountId` must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">The ID of the account for which to get/update account tax settings.</param>
        public virtual GetRequest Get(ulong merchantId, ulong accountId)
        {
            return new GetRequest(this.service, merchantId, accountId);
        }

        /// <summary>Retrieves the tax settings of the account.</summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.AccountTax>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong accountId) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the managing account. If this parameter is not the same as accountId, then this account must
            /// be a multi-client account and `accountId` must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account for which to get/update account tax settings.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/accounttax/{accountId}";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Lists the tax settings of the sub-accounts in your Merchant Center account.</summary>
        /// <param name="merchantId">The ID of the managing account. This must be a multi-client account.</param>
        public virtual ListRequest List(ulong merchantId)
        {
            return new ListRequest(this.service, merchantId);
        }

        /// <summary>Lists the tax settings of the sub-accounts in your Merchant Center account.</summary>
        public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.AccounttaxListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, ulong merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>The ID of the managing account. This must be a multi-client account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The maximum number of tax settings to return in the response, used for paging.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>The token returned by the previous request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "list";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/accounttax";

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("maxResults", new Google.Apis.Discovery.Parameter
                {
                    Name = "maxResults",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageToken",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Updates the tax settings of the account. Any fields that are not provided are deleted from the resource.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">
        /// The ID of the managing account. If this parameter is not the same as accountId, then this account must be a
        /// multi-client account and `accountId` must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">The ID of the account for which to get/update account tax settings.</param>
        public virtual UpdateRequest Update(Google.Apis.ShoppingContent.v2_1.Data.AccountTax body, ulong merchantId, ulong accountId)
        {
            return new UpdateRequest(this.service, body, merchantId, accountId);
        }

        /// <summary>
        /// Updates the tax settings of the account. Any fields that are not provided are deleted from the resource.
        /// </summary>
        public class UpdateRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.AccountTax>
        {
            /// <summary>Constructs a new Update request.</summary>
            public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.AccountTax body, ulong merchantId, ulong accountId) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                Body = body;
                InitParameters();
            }

            /// <summary>
            /// The ID of the managing account. If this parameter is not the same as accountId, then this account must
            /// be a multi-client account and `accountId` must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account for which to get/update account tax settings.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.AccountTax Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "update";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "PUT";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/accounttax/{accountId}";

            /// <summary>Initializes Update parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "collections" collection of methods.</summary>
    public class CollectionsResource
    {
        private const string Resource = "collections";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public CollectionsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>
        /// Uploads a collection to your Merchant Center account. If a collection with the same collectionId already
        /// exists, this method updates that entry. In each update, the collection is completely replaced by the fields
        /// in the body of the update request.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">
        /// Required. The ID of the account that contains the collection. This account cannot be a multi-client account.
        /// </param>
        public virtual CreateRequest Create(Google.Apis.ShoppingContent.v2_1.Data.Collection body, long merchantId)
        {
            return new CreateRequest(this.service, body, merchantId);
        }

        /// <summary>
        /// Uploads a collection to your Merchant Center account. If a collection with the same collectionId already
        /// exists, this method updates that entry. In each update, the collection is completely replaced by the fields
        /// in the body of the update request.
        /// </summary>
        public class CreateRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.Collection>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.Collection body, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>
            /// Required. The ID of the account that contains the collection. This account cannot be a multi-client
            /// account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.Collection Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "create";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/collections";

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Deletes a collection from your Merchant Center account.</summary>
        /// <param name="merchantId">
        /// Required. The ID of the account that contains the collection. This account cannot be a multi-client account.
        /// </param>
        /// <param name="collectionId">
        /// Required. The collectionId of the collection. CollectionId is the same as the REST ID of the collection.
        /// </param>
        public virtual DeleteRequest Delete(long merchantId, string collectionId)
        {
            return new DeleteRequest(this.service, merchantId, collectionId);
        }

        /// <summary>Deletes a collection from your Merchant Center account.</summary>
        public class DeleteRequest : ShoppingContentBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, long merchantId, string collectionId) : base(service)
            {
                MerchantId = merchantId;
                CollectionId = collectionId;
                InitParameters();
            }

            /// <summary>
            /// Required. The ID of the account that contains the collection. This account cannot be a multi-client
            /// account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>
            /// Required. The collectionId of the collection. CollectionId is the same as the REST ID of the collection.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("collectionId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CollectionId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "delete";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "DELETE";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/collections/{collectionId}";

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("collectionId", new Google.Apis.Discovery.Parameter
                {
                    Name = "collectionId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Retrieves a collection from your Merchant Center account.</summary>
        /// <param name="merchantId">
        /// Required. The ID of the account that contains the collection. This account cannot be a multi-client account.
        /// </param>
        /// <param name="collectionId">Required. The REST ID of the collection.</param>
        public virtual GetRequest Get(long merchantId, string collectionId)
        {
            return new GetRequest(this.service, merchantId, collectionId);
        }

        /// <summary>Retrieves a collection from your Merchant Center account.</summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.Collection>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, long merchantId, string collectionId) : base(service)
            {
                MerchantId = merchantId;
                CollectionId = collectionId;
                InitParameters();
            }

            /// <summary>
            /// Required. The ID of the account that contains the collection. This account cannot be a multi-client
            /// account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Required. The REST ID of the collection.</summary>
            [Google.Apis.Util.RequestParameterAttribute("collectionId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CollectionId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/collections/{collectionId}";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("collectionId", new Google.Apis.Discovery.Parameter
                {
                    Name = "collectionId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Lists the collections in your Merchant Center account. The response might contain fewer items than specified
        /// by page_size. Rely on next_page_token to determine if there are more items to be requested.
        /// </summary>
        /// <param name="merchantId">
        /// Required. The ID of the account that contains the collection. This account cannot be a multi-client account.
        /// </param>
        public virtual ListRequest List(long merchantId)
        {
            return new ListRequest(this.service, merchantId);
        }

        /// <summary>
        /// Lists the collections in your Merchant Center account. The response might contain fewer items than specified
        /// by page_size. Rely on next_page_token to determine if there are more items to be requested.
        /// </summary>
        public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ListCollectionsResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>
            /// Required. The ID of the account that contains the collection. This account cannot be a multi-client
            /// account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>
            /// The maximum number of collections to return in the response, used for paging. Defaults to 50; values
            /// above 1000 will be coerced to 1000.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> PageSize { get; set; }

            /// <summary>
            /// Token (if provided) to retrieve the subsequent page. All other parameters must match the original call
            /// that provided the page token.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "list";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/collections";

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageSize", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageSize",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageToken",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "collectionstatuses" collection of methods.</summary>
    public class CollectionstatusesResource
    {
        private const string Resource = "collectionstatuses";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public CollectionstatusesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Gets the status of a collection from your Merchant Center account.</summary>
        /// <param name="merchantId">
        /// Required. The ID of the account that contains the collection. This account cannot be a multi-client account.
        /// </param>
        /// <param name="collectionId">
        /// Required. The collectionId of the collection. CollectionId is the same as the REST ID of the collection.
        /// </param>
        public virtual GetRequest Get(long merchantId, string collectionId)
        {
            return new GetRequest(this.service, merchantId, collectionId);
        }

        /// <summary>Gets the status of a collection from your Merchant Center account.</summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.CollectionStatus>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, long merchantId, string collectionId) : base(service)
            {
                MerchantId = merchantId;
                CollectionId = collectionId;
                InitParameters();
            }

            /// <summary>
            /// Required. The ID of the account that contains the collection. This account cannot be a multi-client
            /// account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>
            /// Required. The collectionId of the collection. CollectionId is the same as the REST ID of the collection.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("collectionId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CollectionId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/collectionstatuses/{collectionId}";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("collectionId", new Google.Apis.Discovery.Parameter
                {
                    Name = "collectionId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Lists the statuses of the collections in your Merchant Center account.</summary>
        /// <param name="merchantId">
        /// Required. The ID of the account that contains the collection. This account cannot be a multi-client account.
        /// </param>
        public virtual ListRequest List(long merchantId)
        {
            return new ListRequest(this.service, merchantId);
        }

        /// <summary>Lists the statuses of the collections in your Merchant Center account.</summary>
        public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ListCollectionStatusesResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>
            /// Required. The ID of the account that contains the collection. This account cannot be a multi-client
            /// account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>
            /// The maximum number of collection statuses to return in the response, used for paging. Defaults to 50;
            /// values above 1000 will be coerced to 1000.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> PageSize { get; set; }

            /// <summary>
            /// Token (if provided) to retrieve the subsequent page. All other parameters must match the original call
            /// that provided the page token.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "list";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/collectionstatuses";

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageSize", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageSize",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageToken",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "conversionsources" collection of methods.</summary>
    public class ConversionsourcesResource
    {
        private const string Resource = "conversionsources";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ConversionsourcesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Creates a new conversion source.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">Required. The ID of the account that owns the new conversion source.</param>
        public virtual CreateRequest Create(Google.Apis.ShoppingContent.v2_1.Data.ConversionSource body, long merchantId)
        {
            return new CreateRequest(this.service, body, merchantId);
        }

        /// <summary>Creates a new conversion source.</summary>
        public class CreateRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ConversionSource>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.ConversionSource body, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>Required. The ID of the account that owns the new conversion source.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.ConversionSource Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "create";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/conversionsources";

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Archives an existing conversion source. It will be recoverable for 30 days. This archiving behavior is not
        /// typical in the Content API and unique to this service.
        /// </summary>
        /// <param name="merchantId">Required. The ID of the account that owns the new conversion source.</param>
        /// <param name="conversionSourceId">Required. The ID of the conversion source to be deleted.</param>
        public virtual DeleteRequest Delete(long merchantId, string conversionSourceId)
        {
            return new DeleteRequest(this.service, merchantId, conversionSourceId);
        }

        /// <summary>
        /// Archives an existing conversion source. It will be recoverable for 30 days. This archiving behavior is not
        /// typical in the Content API and unique to this service.
        /// </summary>
        public class DeleteRequest : ShoppingContentBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, long merchantId, string conversionSourceId) : base(service)
            {
                MerchantId = merchantId;
                ConversionSourceId = conversionSourceId;
                InitParameters();
            }

            /// <summary>Required. The ID of the account that owns the new conversion source.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Required. The ID of the conversion source to be deleted.</summary>
            [Google.Apis.Util.RequestParameterAttribute("conversionSourceId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ConversionSourceId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "delete";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "DELETE";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/conversionsources/{conversionSourceId}";

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("conversionSourceId", new Google.Apis.Discovery.Parameter
                {
                    Name = "conversionSourceId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Fetches a conversion source.</summary>
        /// <param name="merchantId">Required. The ID of the account that owns the new conversion source.</param>
        /// <param name="conversionSourceId">Required. The REST ID of the collection.</param>
        public virtual GetRequest Get(long merchantId, string conversionSourceId)
        {
            return new GetRequest(this.service, merchantId, conversionSourceId);
        }

        /// <summary>Fetches a conversion source.</summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ConversionSource>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, long merchantId, string conversionSourceId) : base(service)
            {
                MerchantId = merchantId;
                ConversionSourceId = conversionSourceId;
                InitParameters();
            }

            /// <summary>Required. The ID of the account that owns the new conversion source.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Required. The REST ID of the collection.</summary>
            [Google.Apis.Util.RequestParameterAttribute("conversionSourceId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ConversionSourceId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/conversionsources/{conversionSourceId}";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("conversionSourceId", new Google.Apis.Discovery.Parameter
                {
                    Name = "conversionSourceId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Retrieves the list of conversion sources the caller has access to.</summary>
        /// <param name="merchantId">Required. The ID of the account that owns the new conversion source.</param>
        public virtual ListRequest List(long merchantId)
        {
            return new ListRequest(this.service, merchantId);
        }

        /// <summary>Retrieves the list of conversion sources the caller has access to.</summary>
        public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ListConversionSourcesResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>Required. The ID of the account that owns the new conversion source.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>
            /// The maximum number of conversion sources to return in a page. If no `page_size` is specified, `100` is
            /// used as the default value. The maximum value is `200`. Values above `200` will be coerced to `200`.
            /// Regardless of pagination, at most `200` conversion sources are returned in total.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> PageSize { get; set; }

            /// <summary>Page token.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>If true, also returns archived conversion sources.</summary>
            [Google.Apis.Util.RequestParameterAttribute("showDeleted", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> ShowDeleted { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "list";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/conversionsources";

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageSize", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageSize",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageToken",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("showDeleted", new Google.Apis.Discovery.Parameter
                {
                    Name = "showDeleted",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Updates information of an existing conversion source.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">Required. The ID of the account that owns the new conversion source.</param>
        /// <param name="conversionSourceId">Required. The ID of the conversion source to be updated.</param>
        public virtual PatchRequest Patch(Google.Apis.ShoppingContent.v2_1.Data.ConversionSource body, long merchantId, string conversionSourceId)
        {
            return new PatchRequest(this.service, body, merchantId, conversionSourceId);
        }

        /// <summary>Updates information of an existing conversion source.</summary>
        public class PatchRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ConversionSource>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.ConversionSource body, long merchantId, string conversionSourceId) : base(service)
            {
                MerchantId = merchantId;
                ConversionSourceId = conversionSourceId;
                Body = body;
                InitParameters();
            }

            /// <summary>Required. The ID of the account that owns the new conversion source.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Required. The ID of the conversion source to be updated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("conversionSourceId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ConversionSourceId { get; private set; }

            /// <summary>
            /// Optional. List of fields being updated. The following fields can be updated: `attribution_settings`,
            /// `display_name`, `currency_code`.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("updateMask", Google.Apis.Util.RequestParameterType.Query)]
            public virtual object UpdateMask { get; set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.ConversionSource Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "patch";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "PATCH";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/conversionsources/{conversionSourceId}";

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("conversionSourceId", new Google.Apis.Discovery.Parameter
                {
                    Name = "conversionSourceId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("updateMask", new Google.Apis.Discovery.Parameter
                {
                    Name = "updateMask",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Re-enables an archived conversion source.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">Required. The ID of the account that owns the new conversion source.</param>
        /// <param name="conversionSourceId">Required. The ID of the conversion source to be undeleted.</param>
        public virtual UndeleteRequest Undelete(Google.Apis.ShoppingContent.v2_1.Data.UndeleteConversionSourceRequest body, long merchantId, string conversionSourceId)
        {
            return new UndeleteRequest(this.service, body, merchantId, conversionSourceId);
        }

        /// <summary>Re-enables an archived conversion source.</summary>
        public class UndeleteRequest : ShoppingContentBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Undelete request.</summary>
            public UndeleteRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.UndeleteConversionSourceRequest body, long merchantId, string conversionSourceId) : base(service)
            {
                MerchantId = merchantId;
                ConversionSourceId = conversionSourceId;
                Body = body;
                InitParameters();
            }

            /// <summary>Required. The ID of the account that owns the new conversion source.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Required. The ID of the conversion source to be undeleted.</summary>
            [Google.Apis.Util.RequestParameterAttribute("conversionSourceId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ConversionSourceId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.UndeleteConversionSourceRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "undelete";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/conversionsources/{conversionSourceId}:undelete";

            /// <summary>Initializes Undelete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("conversionSourceId", new Google.Apis.Discovery.Parameter
                {
                    Name = "conversionSourceId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "csses" collection of methods.</summary>
    public class CssesResource
    {
        private const string Resource = "csses";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public CssesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Retrieves a single CSS domain by ID.</summary>
        /// <param name="cssGroupId">
        /// Required. The ID of the managing account. If this parameter is not the same as [cssDomainId](#cssDomainId),
        /// then this ID must be a CSS group ID and `cssDomainId` must be the ID of a CSS domain affiliated with this
        /// group.
        /// </param>
        /// <param name="cssDomainId">Required. The ID of the CSS domain to return.</param>
        public virtual GetRequest Get(long cssGroupId, long cssDomainId)
        {
            return new GetRequest(this.service, cssGroupId, cssDomainId);
        }

        /// <summary>Retrieves a single CSS domain by ID.</summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.Css>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, long cssGroupId, long cssDomainId) : base(service)
            {
                CssGroupId = cssGroupId;
                CssDomainId = cssDomainId;
                InitParameters();
            }

            /// <summary>
            /// Required. The ID of the managing account. If this parameter is not the same as
            /// [cssDomainId](#cssDomainId), then this ID must be a CSS group ID and `cssDomainId` must be the ID of a
            /// CSS domain affiliated with this group.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("cssGroupId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long CssGroupId { get; private set; }

            /// <summary>Required. The ID of the CSS domain to return.</summary>
            [Google.Apis.Util.RequestParameterAttribute("cssDomainId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long CssDomainId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{cssGroupId}/csses/{cssDomainId}";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("cssGroupId", new Google.Apis.Discovery.Parameter
                {
                    Name = "cssGroupId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("cssDomainId", new Google.Apis.Discovery.Parameter
                {
                    Name = "cssDomainId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Lists CSS domains affiliated with a CSS group.</summary>
        /// <param name="cssGroupId">Required. The CSS group ID of CSS domains to be listed.</param>
        public virtual ListRequest List(long cssGroupId)
        {
            return new ListRequest(this.service, cssGroupId);
        }

        /// <summary>Lists CSS domains affiliated with a CSS group.</summary>
        public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ListCssesResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, long cssGroupId) : base(service)
            {
                CssGroupId = cssGroupId;
                InitParameters();
            }

            /// <summary>Required. The CSS group ID of CSS domains to be listed.</summary>
            [Google.Apis.Util.RequestParameterAttribute("cssGroupId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long CssGroupId { get; private set; }

            /// <summary>
            /// The maximum number of CSS domains to return. The service may return fewer than this value. If
            /// unspecified, at most 50 CSS domains will be returned. The maximum value is 1000; values above 1000 will
            /// be coerced to 1000.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> PageSize { get; set; }

            /// <summary>
            /// A page token, received from a previous `ListCsses` call. Provide this to retrieve the subsequent page.
            /// When paginating, all other parameters provided to `ListCsses` must match the call that provided the page
            /// token.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "list";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{cssGroupId}/csses";

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("cssGroupId", new Google.Apis.Discovery.Parameter
                {
                    Name = "cssGroupId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageSize", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageSize",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageToken",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Updates labels that are assigned to a CSS domain by its CSS group.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="cssGroupId">Required. The CSS group ID of the updated CSS domain.</param>
        /// <param name="cssDomainId">Required. The ID of the updated CSS domain.</param>
        public virtual UpdatelabelsRequest Updatelabels(Google.Apis.ShoppingContent.v2_1.Data.LabelIds body, long cssGroupId, long cssDomainId)
        {
            return new UpdatelabelsRequest(this.service, body, cssGroupId, cssDomainId);
        }

        /// <summary>Updates labels that are assigned to a CSS domain by its CSS group.</summary>
        public class UpdatelabelsRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.Css>
        {
            /// <summary>Constructs a new Updatelabels request.</summary>
            public UpdatelabelsRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.LabelIds body, long cssGroupId, long cssDomainId) : base(service)
            {
                CssGroupId = cssGroupId;
                CssDomainId = cssDomainId;
                Body = body;
                InitParameters();
            }

            /// <summary>Required. The CSS group ID of the updated CSS domain.</summary>
            [Google.Apis.Util.RequestParameterAttribute("cssGroupId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long CssGroupId { get; private set; }

            /// <summary>Required. The ID of the updated CSS domain.</summary>
            [Google.Apis.Util.RequestParameterAttribute("cssDomainId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long CssDomainId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.LabelIds Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "updatelabels";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{cssGroupId}/csses/{cssDomainId}/updatelabels";

            /// <summary>Initializes Updatelabels parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("cssGroupId", new Google.Apis.Discovery.Parameter
                {
                    Name = "cssGroupId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("cssDomainId", new Google.Apis.Discovery.Parameter
                {
                    Name = "cssDomainId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "datafeeds" collection of methods.</summary>
    public class DatafeedsResource
    {
        private const string Resource = "datafeeds";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public DatafeedsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Deletes, fetches, gets, inserts and updates multiple datafeeds in a single request.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CustombatchRequest Custombatch(Google.Apis.ShoppingContent.v2_1.Data.DatafeedsCustomBatchRequest body)
        {
            return new CustombatchRequest(this.service, body);
        }

        /// <summary>Deletes, fetches, gets, inserts and updates multiple datafeeds in a single request.</summary>
        public class CustombatchRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.DatafeedsCustomBatchResponse>
        {
            /// <summary>Constructs a new Custombatch request.</summary>
            public CustombatchRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.DatafeedsCustomBatchRequest body) : base(service)
            {
                Body = body;
                InitParameters();
            }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.DatafeedsCustomBatchRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "custombatch";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "datafeeds/batch";

            /// <summary>Initializes Custombatch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
            }
        }

        /// <summary>Deletes a datafeed configuration from your Merchant Center account.</summary>
        /// <param name="merchantId">
        /// The ID of the account that manages the datafeed. This account cannot be a multi-client account.
        /// </param>
        /// <param name="datafeedId">The ID of the datafeed.</param>
        public virtual DeleteRequest Delete(ulong merchantId, ulong datafeedId)
        {
            return new DeleteRequest(this.service, merchantId, datafeedId);
        }

        /// <summary>Deletes a datafeed configuration from your Merchant Center account.</summary>
        public class DeleteRequest : ShoppingContentBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong datafeedId) : base(service)
            {
                MerchantId = merchantId;
                DatafeedId = datafeedId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the account that manages the datafeed. This account cannot be a multi-client account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the datafeed.</summary>
            [Google.Apis.Util.RequestParameterAttribute("datafeedId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong DatafeedId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "delete";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "DELETE";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/datafeeds/{datafeedId}";

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("datafeedId", new Google.Apis.Discovery.Parameter
                {
                    Name = "datafeedId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Invokes a fetch for the datafeed in your Merchant Center account. If you need to call this method more than
        /// once per day, we recommend you use the [Products
        /// service](https://developers.google.com/shopping-content/reference/rest/v2.1/products) to update your product
        /// data.
        /// </summary>
        /// <param name="merchantId">
        /// The ID of the account that manages the datafeed. This account cannot be a multi-client account.
        /// </param>
        /// <param name="datafeedId">The ID of the datafeed to be fetched.</param>
        public virtual FetchnowRequest Fetchnow(ulong merchantId, ulong datafeedId)
        {
            return new FetchnowRequest(this.service, merchantId, datafeedId);
        }

        /// <summary>
        /// Invokes a fetch for the datafeed in your Merchant Center account. If you need to call this method more than
        /// once per day, we recommend you use the [Products
        /// service](https://developers.google.com/shopping-content/reference/rest/v2.1/products) to update your product
        /// data.
        /// </summary>
        public class FetchnowRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.DatafeedsFetchNowResponse>
        {
            /// <summary>Constructs a new Fetchnow request.</summary>
            public FetchnowRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong datafeedId) : base(service)
            {
                MerchantId = merchantId;
                DatafeedId = datafeedId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the account that manages the datafeed. This account cannot be a multi-client account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the datafeed to be fetched.</summary>
            [Google.Apis.Util.RequestParameterAttribute("datafeedId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong DatafeedId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "fetchnow";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/datafeeds/{datafeedId}/fetchNow";

            /// <summary>Initializes Fetchnow parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("datafeedId", new Google.Apis.Discovery.Parameter
                {
                    Name = "datafeedId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Retrieves a datafeed configuration from your Merchant Center account.</summary>
        /// <param name="merchantId">
        /// The ID of the account that manages the datafeed. This account cannot be a multi-client account.
        /// </param>
        /// <param name="datafeedId">The ID of the datafeed.</param>
        public virtual GetRequest Get(ulong merchantId, ulong datafeedId)
        {
            return new GetRequest(this.service, merchantId, datafeedId);
        }

        /// <summary>Retrieves a datafeed configuration from your Merchant Center account.</summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.Datafeed>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong datafeedId) : base(service)
            {
                MerchantId = merchantId;
                DatafeedId = datafeedId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the account that manages the datafeed. This account cannot be a multi-client account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the datafeed.</summary>
            [Google.Apis.Util.RequestParameterAttribute("datafeedId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong DatafeedId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/datafeeds/{datafeedId}";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("datafeedId", new Google.Apis.Discovery.Parameter
                {
                    Name = "datafeedId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Registers a datafeed configuration with your Merchant Center account.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">
        /// The ID of the account that manages the datafeed. This account cannot be a multi-client account.
        /// </param>
        public virtual InsertRequest Insert(Google.Apis.ShoppingContent.v2_1.Data.Datafeed body, ulong merchantId)
        {
            return new InsertRequest(this.service, body, merchantId);
        }

        /// <summary>Registers a datafeed configuration with your Merchant Center account.</summary>
        public class InsertRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.Datafeed>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.Datafeed body, ulong merchantId) : base(service)
            {
                MerchantId = merchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>
            /// The ID of the account that manages the datafeed. This account cannot be a multi-client account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.Datafeed Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "insert";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/datafeeds";

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Lists the configurations for datafeeds in your Merchant Center account.</summary>
        /// <param name="merchantId">
        /// The ID of the account that manages the datafeeds. This account cannot be a multi-client account.
        /// </param>
        public virtual ListRequest List(ulong merchantId)
        {
            return new ListRequest(this.service, merchantId);
        }

        /// <summary>Lists the configurations for datafeeds in your Merchant Center account.</summary>
        public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.DatafeedsListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, ulong merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the account that manages the datafeeds. This account cannot be a multi-client account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The maximum number of products to return in the response, used for paging.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>The token returned by the previous request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "list";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/datafeeds";

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("maxResults", new Google.Apis.Discovery.Parameter
                {
                    Name = "maxResults",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageToken",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Updates a datafeed configuration of your Merchant Center account. Any fields that are not provided are
        /// deleted from the resource.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">
        /// The ID of the account that manages the datafeed. This account cannot be a multi-client account.
        /// </param>
        /// <param name="datafeedId">The ID of the datafeed.</param>
        public virtual UpdateRequest Update(Google.Apis.ShoppingContent.v2_1.Data.Datafeed body, ulong merchantId, ulong datafeedId)
        {
            return new UpdateRequest(this.service, body, merchantId, datafeedId);
        }

        /// <summary>
        /// Updates a datafeed configuration of your Merchant Center account. Any fields that are not provided are
        /// deleted from the resource.
        /// </summary>
        public class UpdateRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.Datafeed>
        {
            /// <summary>Constructs a new Update request.</summary>
            public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.Datafeed body, ulong merchantId, ulong datafeedId) : base(service)
            {
                MerchantId = merchantId;
                DatafeedId = datafeedId;
                Body = body;
                InitParameters();
            }

            /// <summary>
            /// The ID of the account that manages the datafeed. This account cannot be a multi-client account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the datafeed.</summary>
            [Google.Apis.Util.RequestParameterAttribute("datafeedId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong DatafeedId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.Datafeed Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "update";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "PUT";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/datafeeds/{datafeedId}";

            /// <summary>Initializes Update parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("datafeedId", new Google.Apis.Discovery.Parameter
                {
                    Name = "datafeedId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "datafeedstatuses" collection of methods.</summary>
    public class DatafeedstatusesResource
    {
        private const string Resource = "datafeedstatuses";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public DatafeedstatusesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Gets multiple Merchant Center datafeed statuses in a single request.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CustombatchRequest Custombatch(Google.Apis.ShoppingContent.v2_1.Data.DatafeedstatusesCustomBatchRequest body)
        {
            return new CustombatchRequest(this.service, body);
        }

        /// <summary>Gets multiple Merchant Center datafeed statuses in a single request.</summary>
        public class CustombatchRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.DatafeedstatusesCustomBatchResponse>
        {
            /// <summary>Constructs a new Custombatch request.</summary>
            public CustombatchRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.DatafeedstatusesCustomBatchRequest body) : base(service)
            {
                Body = body;
                InitParameters();
            }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.DatafeedstatusesCustomBatchRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "custombatch";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "datafeedstatuses/batch";

            /// <summary>Initializes Custombatch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
            }
        }

        /// <summary>Retrieves the status of a datafeed from your Merchant Center account.</summary>
        /// <param name="merchantId">
        /// The ID of the account that manages the datafeed. This account cannot be a multi-client account.
        /// </param>
        /// <param name="datafeedId">The ID of the datafeed.</param>
        public virtual GetRequest Get(ulong merchantId, ulong datafeedId)
        {
            return new GetRequest(this.service, merchantId, datafeedId);
        }

        /// <summary>Retrieves the status of a datafeed from your Merchant Center account.</summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.DatafeedStatus>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong datafeedId) : base(service)
            {
                MerchantId = merchantId;
                DatafeedId = datafeedId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the account that manages the datafeed. This account cannot be a multi-client account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the datafeed.</summary>
            [Google.Apis.Util.RequestParameterAttribute("datafeedId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong DatafeedId { get; private set; }

            /// <summary>
            /// Deprecated. Use `feedLabel` instead. The country to get the datafeed status for. If this parameter is
            /// provided then `language` must also be provided. Note that this parameter is required for feeds targeting
            /// multiple countries and languages, since a feed may have a different status for each target.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("country", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Country { get; set; }

            /// <summary>
            /// The feed label to get the datafeed status for. If this parameter is provided then `language` must also
            /// be provided. Note that this parameter is required for feeds targeting multiple countries and languages,
            /// since a feed may have a different status for each target.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("feedLabel", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string FeedLabel { get; set; }

            /// <summary>
            /// The language to get the datafeed status for. If this parameter is provided then `country` must also be
            /// provided. Note that this parameter is required for feeds targeting multiple countries and languages,
            /// since a feed may have a different status for each target.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("language", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Language { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/datafeedstatuses/{datafeedId}";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("datafeedId", new Google.Apis.Discovery.Parameter
                {
                    Name = "datafeedId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("country", new Google.Apis.Discovery.Parameter
                {
                    Name = "country",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("feedLabel", new Google.Apis.Discovery.Parameter
                {
                    Name = "feedLabel",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("language", new Google.Apis.Discovery.Parameter
                {
                    Name = "language",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Lists the statuses of the datafeeds in your Merchant Center account.</summary>
        /// <param name="merchantId">
        /// The ID of the account that manages the datafeeds. This account cannot be a multi-client account.
        /// </param>
        public virtual ListRequest List(ulong merchantId)
        {
            return new ListRequest(this.service, merchantId);
        }

        /// <summary>Lists the statuses of the datafeeds in your Merchant Center account.</summary>
        public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.DatafeedstatusesListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, ulong merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the account that manages the datafeeds. This account cannot be a multi-client account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The maximum number of products to return in the response, used for paging.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>The token returned by the previous request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "list";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/datafeedstatuses";

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("maxResults", new Google.Apis.Discovery.Parameter
                {
                    Name = "maxResults",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageToken",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "freelistingsprogram" collection of methods.</summary>
    public class FreelistingsprogramResource
    {
        private const string Resource = "freelistingsprogram";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public FreelistingsprogramResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
            Checkoutsettings = new CheckoutsettingsResource(service);
        }

        /// <summary>Gets the Checkoutsettings resource.</summary>
        public virtual CheckoutsettingsResource Checkoutsettings { get; }

        /// <summary>The "checkoutsettings" collection of methods.</summary>
        public class CheckoutsettingsResource
        {
            private const string Resource = "checkoutsettings";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public CheckoutsettingsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;
            }

            /// <summary>Deletes `Checkout` settings and unenrolls merchant from `Checkout` program.</summary>
            /// <param name="merchantId">Required. The ID of the account.</param>
            public virtual DeleteRequest Delete(long merchantId)
            {
                return new DeleteRequest(this.service, merchantId);
            }

            /// <summary>Deletes `Checkout` settings and unenrolls merchant from `Checkout` program.</summary>
            public class DeleteRequest : ShoppingContentBaseServiceRequest<string>
            {
                /// <summary>Constructs a new Delete request.</summary>
                public DeleteRequest(Google.Apis.Services.IClientService service, long merchantId) : base(service)
                {
                    MerchantId = merchantId;
                    InitParameters();
                }

                /// <summary>Required. The ID of the account.</summary>
                [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual long MerchantId { get; private set; }

                /// <summary>Gets the method name.</summary>
                public override string MethodName => "delete";

                /// <summary>Gets the HTTP method.</summary>
                public override string HttpMethod => "DELETE";

                /// <summary>Gets the REST path.</summary>
                public override string RestPath => "{merchantId}/freelistingsprogram/checkoutsettings";

                /// <summary>Initializes Delete parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();
                    RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "merchantId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                }
            }

            /// <summary>
            /// Gets Checkout settings for the given merchant. This includes information about review state, enrollment
            /// state and URL settings.
            /// </summary>
            /// <param name="merchantId">Required. The ID of the account.</param>
            public virtual GetRequest Get(long merchantId)
            {
                return new GetRequest(this.service, merchantId);
            }

            /// <summary>
            /// Gets Checkout settings for the given merchant. This includes information about review state, enrollment
            /// state and URL settings.
            /// </summary>
            public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.CheckoutSettings>
            {
                /// <summary>Constructs a new Get request.</summary>
                public GetRequest(Google.Apis.Services.IClientService service, long merchantId) : base(service)
                {
                    MerchantId = merchantId;
                    InitParameters();
                }

                /// <summary>Required. The ID of the account.</summary>
                [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual long MerchantId { get; private set; }

                /// <summary>Gets the method name.</summary>
                public override string MethodName => "get";

                /// <summary>Gets the HTTP method.</summary>
                public override string HttpMethod => "GET";

                /// <summary>Gets the REST path.</summary>
                public override string RestPath => "{merchantId}/freelistingsprogram/checkoutsettings";

                /// <summary>Initializes Get parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();
                    RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "merchantId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                }
            }

            /// <summary>Enrolls merchant in `Checkout` program.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="merchantId">Required. The ID of the account.</param>
            public virtual InsertRequest Insert(Google.Apis.ShoppingContent.v2_1.Data.InsertCheckoutSettingsRequest body, long merchantId)
            {
                return new InsertRequest(this.service, body, merchantId);
            }

            /// <summary>Enrolls merchant in `Checkout` program.</summary>
            public class InsertRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.CheckoutSettings>
            {
                /// <summary>Constructs a new Insert request.</summary>
                public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.InsertCheckoutSettingsRequest body, long merchantId) : base(service)
                {
                    MerchantId = merchantId;
                    Body = body;
                    InitParameters();
                }

                /// <summary>Required. The ID of the account.</summary>
                [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual long MerchantId { get; private set; }

                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.ShoppingContent.v2_1.Data.InsertCheckoutSettingsRequest Body { get; set; }

                /// <summary>Returns the body of the request.</summary>
                protected override object GetBody() => Body;

                /// <summary>Gets the method name.</summary>
                public override string MethodName => "insert";

                /// <summary>Gets the HTTP method.</summary>
                public override string HttpMethod => "POST";

                /// <summary>Gets the REST path.</summary>
                public override string RestPath => "{merchantId}/freelistingsprogram/checkoutsettings";

                /// <summary>Initializes Insert parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();
                    RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "merchantId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                }
            }
        }

        /// <summary>
        /// Retrieves the status and review eligibility for the free listing program. Returns errors and warnings if
        /// they require action to resolve, will become disapprovals, or impact impressions. Use `accountstatuses` to
        /// view all issues for an account.
        /// </summary>
        /// <param name="merchantId">Required. The ID of the account.</param>
        public virtual GetRequest Get(long merchantId)
        {
            return new GetRequest(this.service, merchantId);
        }

        /// <summary>
        /// Retrieves the status and review eligibility for the free listing program. Returns errors and warnings if
        /// they require action to resolve, will become disapprovals, or impact impressions. Use `accountstatuses` to
        /// view all issues for an account.
        /// </summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.FreeListingsProgramStatus>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>Required. The ID of the account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/freelistingsprogram";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Requests a review of free listings in a specific region. This method deprecated. Use the
        /// `MerchantSupportService` to view product and account issues and request a review.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">Required. The ID of the account.</param>
        public virtual RequestreviewRequest Requestreview(Google.Apis.ShoppingContent.v2_1.Data.RequestReviewFreeListingsRequest body, long merchantId)
        {
            return new RequestreviewRequest(this.service, body, merchantId);
        }

        /// <summary>
        /// Requests a review of free listings in a specific region. This method deprecated. Use the
        /// `MerchantSupportService` to view product and account issues and request a review.
        /// </summary>
        public class RequestreviewRequest : ShoppingContentBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Requestreview request.</summary>
            public RequestreviewRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.RequestReviewFreeListingsRequest body, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>Required. The ID of the account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.RequestReviewFreeListingsRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "requestreview";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/freelistingsprogram/requestreview";

            /// <summary>Initializes Requestreview parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "liasettings" collection of methods.</summary>
    public class LiasettingsResource
    {
        private const string Resource = "liasettings";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public LiasettingsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Retrieves and/or updates the LIA settings of multiple accounts in a single request.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CustombatchRequest Custombatch(Google.Apis.ShoppingContent.v2_1.Data.LiasettingsCustomBatchRequest body)
        {
            return new CustombatchRequest(this.service, body);
        }

        /// <summary>Retrieves and/or updates the LIA settings of multiple accounts in a single request.</summary>
        public class CustombatchRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.LiasettingsCustomBatchResponse>
        {
            /// <summary>Constructs a new Custombatch request.</summary>
            public CustombatchRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.LiasettingsCustomBatchRequest body) : base(service)
            {
                Body = body;
                InitParameters();
            }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.LiasettingsCustomBatchRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "custombatch";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "liasettings/batch";

            /// <summary>Initializes Custombatch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
            }
        }

        /// <summary>Retrieves the LIA settings of the account.</summary>
        /// <param name="merchantId">
        /// The ID of the managing account. If this parameter is not the same as accountId, then this account must be a
        /// multi-client account and `accountId` must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">The ID of the account for which to get or update LIA settings.</param>
        public virtual GetRequest Get(ulong merchantId, ulong accountId)
        {
            return new GetRequest(this.service, merchantId, accountId);
        }

        /// <summary>Retrieves the LIA settings of the account.</summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.LiaSettings>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong accountId) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the managing account. If this parameter is not the same as accountId, then this account must
            /// be a multi-client account and `accountId` must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account for which to get or update LIA settings.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/liasettings/{accountId}";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Retrieves the list of accessible Business Profiles.</summary>
        /// <param name="merchantId">
        /// The ID of the managing account. If this parameter is not the same as accountId, then this account must be a
        /// multi-client account and `accountId` must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">The ID of the account for which to retrieve accessible Business Profiles.</param>
        public virtual GetaccessiblegmbaccountsRequest Getaccessiblegmbaccounts(ulong merchantId, ulong accountId)
        {
            return new GetaccessiblegmbaccountsRequest(this.service, merchantId, accountId);
        }

        /// <summary>Retrieves the list of accessible Business Profiles.</summary>
        public class GetaccessiblegmbaccountsRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.LiasettingsGetAccessibleGmbAccountsResponse>
        {
            /// <summary>Constructs a new Getaccessiblegmbaccounts request.</summary>
            public GetaccessiblegmbaccountsRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong accountId) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the managing account. If this parameter is not the same as accountId, then this account must
            /// be a multi-client account and `accountId` must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account for which to retrieve accessible Business Profiles.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "getaccessiblegmbaccounts";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/liasettings/{accountId}/accessiblegmbaccounts";

            /// <summary>Initializes Getaccessiblegmbaccounts parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Lists the LIA settings of the sub-accounts in your Merchant Center account.</summary>
        /// <param name="merchantId">The ID of the managing account. This must be a multi-client account.</param>
        public virtual ListRequest List(ulong merchantId)
        {
            return new ListRequest(this.service, merchantId);
        }

        /// <summary>Lists the LIA settings of the sub-accounts in your Merchant Center account.</summary>
        public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.LiasettingsListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, ulong merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>The ID of the managing account. This must be a multi-client account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The maximum number of LIA settings to return in the response, used for paging.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>The token returned by the previous request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "list";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/liasettings";

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("maxResults", new Google.Apis.Discovery.Parameter
                {
                    Name = "maxResults",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageToken",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Retrieves the list of POS data providers that have active settings for the all eiligible countries.
        /// </summary>
        public virtual ListposdataprovidersRequest Listposdataproviders()
        {
            return new ListposdataprovidersRequest(this.service);
        }

        /// <summary>
        /// Retrieves the list of POS data providers that have active settings for the all eiligible countries.
        /// </summary>
        public class ListposdataprovidersRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.LiasettingsListPosDataProvidersResponse>
        {
            /// <summary>Constructs a new Listposdataproviders request.</summary>
            public ListposdataprovidersRequest(Google.Apis.Services.IClientService service) : base(service)
            {
                InitParameters();
            }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "listposdataproviders";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "liasettings/posdataproviders";

            /// <summary>Initializes Listposdataproviders parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
            }
        }

        /// <summary>Requests access to a specified Business Profile.</summary>
        /// <param name="merchantId">
        /// The ID of the managing account. If this parameter is not the same as accountId, then this account must be a
        /// multi-client account and `accountId` must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">The ID of the account for which Business Profile access is requested.</param>
        /// <param name="gmbEmail">The email of the Business Profile.</param>
        public virtual RequestgmbaccessRequest Requestgmbaccess(ulong merchantId, ulong accountId, string gmbEmail)
        {
            return new RequestgmbaccessRequest(this.service, merchantId, accountId, gmbEmail);
        }

        /// <summary>Requests access to a specified Business Profile.</summary>
        public class RequestgmbaccessRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.LiasettingsRequestGmbAccessResponse>
        {
            /// <summary>Constructs a new Requestgmbaccess request.</summary>
            public RequestgmbaccessRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong accountId, string gmbEmail) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                GmbEmail = gmbEmail;
                InitParameters();
            }

            /// <summary>
            /// The ID of the managing account. If this parameter is not the same as accountId, then this account must
            /// be a multi-client account and `accountId` must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account for which Business Profile access is requested.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>The email of the Business Profile.</summary>
            [Google.Apis.Util.RequestParameterAttribute("gmbEmail", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string GmbEmail { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "requestgmbaccess";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/liasettings/{accountId}/requestgmbaccess";

            /// <summary>Initializes Requestgmbaccess parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("gmbEmail", new Google.Apis.Discovery.Parameter
                {
                    Name = "gmbEmail",
                    IsRequired = true,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Requests inventory validation for the specified country.</summary>
        /// <param name="merchantId">
        /// The ID of the managing account. If this parameter is not the same as accountId, then this account must be a
        /// multi-client account and `accountId` must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">
        /// The ID of the account that manages the order. This cannot be a multi-client account.
        /// </param>
        /// <param name="country">The country for which inventory validation is requested.</param>
        public virtual RequestinventoryverificationRequest Requestinventoryverification(ulong merchantId, ulong accountId, string country)
        {
            return new RequestinventoryverificationRequest(this.service, merchantId, accountId, country);
        }

        /// <summary>Requests inventory validation for the specified country.</summary>
        public class RequestinventoryverificationRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.LiasettingsRequestInventoryVerificationResponse>
        {
            /// <summary>Constructs a new Requestinventoryverification request.</summary>
            public RequestinventoryverificationRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong accountId, string country) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                Country = country;
                InitParameters();
            }

            /// <summary>
            /// The ID of the managing account. If this parameter is not the same as accountId, then this account must
            /// be a multi-client account and `accountId` must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account that manages the order. This cannot be a multi-client account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>The country for which inventory validation is requested.</summary>
            [Google.Apis.Util.RequestParameterAttribute("country", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Country { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "requestinventoryverification";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/liasettings/{accountId}/requestinventoryverification/{country}";

            /// <summary>Initializes Requestinventoryverification parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("country", new Google.Apis.Discovery.Parameter
                {
                    Name = "country",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Sets the inventory verification contact for the specified country.</summary>
        /// <param name="merchantId">
        /// The ID of the managing account. If this parameter is not the same as accountId, then this account must be a
        /// multi-client account and `accountId` must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">
        /// The ID of the account that manages the order. This cannot be a multi-client account.
        /// </param>
        /// <param name="country">The country for which inventory verification is requested.</param>
        /// <param name="language">The language for which inventory verification is requested.</param>
        /// <param name="contactName">The name of the inventory verification contact.</param>
        /// <param name="contactEmail">The email of the inventory verification contact.</param>
        public virtual SetinventoryverificationcontactRequest Setinventoryverificationcontact(ulong merchantId, ulong accountId, string country, string language, string contactName, string contactEmail)
        {
            return new SetinventoryverificationcontactRequest(this.service, merchantId, accountId, country, language, contactName, contactEmail);
        }

        /// <summary>Sets the inventory verification contact for the specified country.</summary>
        public class SetinventoryverificationcontactRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.LiasettingsSetInventoryVerificationContactResponse>
        {
            /// <summary>Constructs a new Setinventoryverificationcontact request.</summary>
            public SetinventoryverificationcontactRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong accountId, string country, string language, string contactName, string contactEmail) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                Country = country;
                Language = language;
                ContactName = contactName;
                ContactEmail = contactEmail;
                InitParameters();
            }

            /// <summary>
            /// The ID of the managing account. If this parameter is not the same as accountId, then this account must
            /// be a multi-client account and `accountId` must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account that manages the order. This cannot be a multi-client account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>The country for which inventory verification is requested.</summary>
            [Google.Apis.Util.RequestParameterAttribute("country", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Country { get; private set; }

            /// <summary>The language for which inventory verification is requested.</summary>
            [Google.Apis.Util.RequestParameterAttribute("language", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Language { get; private set; }

            /// <summary>The name of the inventory verification contact.</summary>
            [Google.Apis.Util.RequestParameterAttribute("contactName", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ContactName { get; private set; }

            /// <summary>The email of the inventory verification contact.</summary>
            [Google.Apis.Util.RequestParameterAttribute("contactEmail", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ContactEmail { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "setinventoryverificationcontact";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/liasettings/{accountId}/setinventoryverificationcontact";

            /// <summary>Initializes Setinventoryverificationcontact parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("country", new Google.Apis.Discovery.Parameter
                {
                    Name = "country",
                    IsRequired = true,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("language", new Google.Apis.Discovery.Parameter
                {
                    Name = "language",
                    IsRequired = true,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("contactName", new Google.Apis.Discovery.Parameter
                {
                    Name = "contactName",
                    IsRequired = true,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("contactEmail", new Google.Apis.Discovery.Parameter
                {
                    Name = "contactEmail",
                    IsRequired = true,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Sets the omnichannel experience for the specified country. Only supported for merchants whose POS data
        /// provider is trusted to enable the corresponding experience. For more context, see these help articles [about
        /// LFP](https://support.google.com/merchants/answer/7676652) and [how to get
        /// started](https://support.google.com/merchants/answer/7676578) with it.
        /// </summary>
        /// <param name="merchantId">
        /// The ID of the managing account. If this parameter is not the same as accountId, then this account must be a
        /// multi-client account and `accountId` must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">The ID of the account for which to retrieve accessible Business Profiles.</param>
        public virtual SetomnichannelexperienceRequest Setomnichannelexperience(ulong merchantId, ulong accountId)
        {
            return new SetomnichannelexperienceRequest(this.service, merchantId, accountId);
        }

        /// <summary>
        /// Sets the omnichannel experience for the specified country. Only supported for merchants whose POS data
        /// provider is trusted to enable the corresponding experience. For more context, see these help articles [about
        /// LFP](https://support.google.com/merchants/answer/7676652) and [how to get
        /// started](https://support.google.com/merchants/answer/7676578) with it.
        /// </summary>
        public class SetomnichannelexperienceRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.LiaOmnichannelExperience>
        {
            /// <summary>Constructs a new Setomnichannelexperience request.</summary>
            public SetomnichannelexperienceRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong accountId) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the managing account. If this parameter is not the same as accountId, then this account must
            /// be a multi-client account and `accountId` must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account for which to retrieve accessible Business Profiles.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>
            /// The CLDR country code (for example, "US") for which the omnichannel experience is selected.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("country", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Country { get; set; }

            /// <summary>
            /// The Local Store Front (LSF) type for this country. Acceptable values are: - "`ghlsf`" (Google-Hosted
            /// Local Store Front) - "`mhlsfBasic`" (Merchant-Hosted Local Store Front Basic) - "`mhlsfFull`"
            /// (Merchant-Hosted Local Store Front Full) More details about these types can be found here.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("lsfType", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string LsfType { get; set; }

            /// <summary>
            /// The Pickup types for this country. Acceptable values are: - "`pickupToday`" - "`pickupLater`"
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("pickupTypes", Google.Apis.Util.RequestParameterType.Query)]
            public virtual Google.Apis.Util.Repeatable<string> PickupTypes { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "setomnichannelexperience";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/liasettings/{accountId}/setomnichannelexperience";

            /// <summary>Initializes Setomnichannelexperience parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("country", new Google.Apis.Discovery.Parameter
                {
                    Name = "country",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("lsfType", new Google.Apis.Discovery.Parameter
                {
                    Name = "lsfType",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pickupTypes", new Google.Apis.Discovery.Parameter
                {
                    Name = "pickupTypes",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Sets the POS data provider for the specified country.</summary>
        /// <param name="merchantId">
        /// The ID of the managing account. If this parameter is not the same as accountId, then this account must be a
        /// multi-client account and `accountId` must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">The ID of the account for which to retrieve accessible Business Profiles.</param>
        /// <param name="country">The country for which the POS data provider is selected.</param>
        public virtual SetposdataproviderRequest Setposdataprovider(ulong merchantId, ulong accountId, string country)
        {
            return new SetposdataproviderRequest(this.service, merchantId, accountId, country);
        }

        /// <summary>Sets the POS data provider for the specified country.</summary>
        public class SetposdataproviderRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.LiasettingsSetPosDataProviderResponse>
        {
            /// <summary>Constructs a new Setposdataprovider request.</summary>
            public SetposdataproviderRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong accountId, string country) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                Country = country;
                InitParameters();
            }

            /// <summary>
            /// The ID of the managing account. If this parameter is not the same as accountId, then this account must
            /// be a multi-client account and `accountId` must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account for which to retrieve accessible Business Profiles.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>The country for which the POS data provider is selected.</summary>
            [Google.Apis.Util.RequestParameterAttribute("country", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Country { get; private set; }

            /// <summary>The ID of POS data provider.</summary>
            [Google.Apis.Util.RequestParameterAttribute("posDataProviderId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<ulong> PosDataProviderId { get; set; }

            /// <summary>The account ID by which this merchant is known to the POS data provider.</summary>
            [Google.Apis.Util.RequestParameterAttribute("posExternalAccountId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PosExternalAccountId { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "setposdataprovider";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/liasettings/{accountId}/setposdataprovider";

            /// <summary>Initializes Setposdataprovider parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("country", new Google.Apis.Discovery.Parameter
                {
                    Name = "country",
                    IsRequired = true,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("posDataProviderId", new Google.Apis.Discovery.Parameter
                {
                    Name = "posDataProviderId",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("posExternalAccountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "posExternalAccountId",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Updates the LIA settings of the account. Any fields that are not provided are deleted from the resource.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">
        /// The ID of the managing account. If this parameter is not the same as accountId, then this account must be a
        /// multi-client account and `accountId` must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">The ID of the account for which to get or update LIA settings.</param>
        public virtual UpdateRequest Update(Google.Apis.ShoppingContent.v2_1.Data.LiaSettings body, ulong merchantId, ulong accountId)
        {
            return new UpdateRequest(this.service, body, merchantId, accountId);
        }

        /// <summary>
        /// Updates the LIA settings of the account. Any fields that are not provided are deleted from the resource.
        /// </summary>
        public class UpdateRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.LiaSettings>
        {
            /// <summary>Constructs a new Update request.</summary>
            public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.LiaSettings body, ulong merchantId, ulong accountId) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                Body = body;
                InitParameters();
            }

            /// <summary>
            /// The ID of the managing account. If this parameter is not the same as accountId, then this account must
            /// be a multi-client account and `accountId` must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account for which to get or update LIA settings.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.LiaSettings Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "update";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "PUT";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/liasettings/{accountId}";

            /// <summary>Initializes Update parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "localinventory" collection of methods.</summary>
    public class LocalinventoryResource
    {
        private const string Resource = "localinventory";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public LocalinventoryResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Updates local inventory for multiple products or stores in a single request.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CustombatchRequest Custombatch(Google.Apis.ShoppingContent.v2_1.Data.LocalinventoryCustomBatchRequest body)
        {
            return new CustombatchRequest(this.service, body);
        }

        /// <summary>Updates local inventory for multiple products or stores in a single request.</summary>
        public class CustombatchRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.LocalinventoryCustomBatchResponse>
        {
            /// <summary>Constructs a new Custombatch request.</summary>
            public CustombatchRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.LocalinventoryCustomBatchRequest body) : base(service)
            {
                Body = body;
                InitParameters();
            }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.LocalinventoryCustomBatchRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "custombatch";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "localinventory/batch";

            /// <summary>Initializes Custombatch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
            }
        }

        /// <summary>Updates the local inventory of a product in your Merchant Center account.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">
        /// The ID of the account that contains the product. This account cannot be a multi-client account.
        /// </param>
        /// <param name="productId">The REST ID of the product for which to update local inventory.</param>
        public virtual InsertRequest Insert(Google.Apis.ShoppingContent.v2_1.Data.LocalInventory body, ulong merchantId, string productId)
        {
            return new InsertRequest(this.service, body, merchantId, productId);
        }

        /// <summary>Updates the local inventory of a product in your Merchant Center account.</summary>
        public class InsertRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.LocalInventory>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.LocalInventory body, ulong merchantId, string productId) : base(service)
            {
                MerchantId = merchantId;
                ProductId = productId;
                Body = body;
                InitParameters();
            }

            /// <summary>
            /// The ID of the account that contains the product. This account cannot be a multi-client account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The REST ID of the product for which to update local inventory.</summary>
            [Google.Apis.Util.RequestParameterAttribute("productId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ProductId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.LocalInventory Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "insert";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/products/{productId}/localinventory";

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("productId", new Google.Apis.Discovery.Parameter
                {
                    Name = "productId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "merchantsupport" collection of methods.</summary>
    public class MerchantsupportResource
    {
        private const string Resource = "merchantsupport";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public MerchantsupportResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>
        /// Provide a list of merchant's issues with a support content and available actions. This content and actions
        /// are meant to be rendered and shown in third-party applications.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">Required. The ID of the account to fetch issues for.</param>
        public virtual RenderaccountissuesRequest Renderaccountissues(Google.Apis.ShoppingContent.v2_1.Data.RenderAccountIssuesRequestPayload body, long merchantId)
        {
            return new RenderaccountissuesRequest(this.service, body, merchantId);
        }

        /// <summary>
        /// Provide a list of merchant's issues with a support content and available actions. This content and actions
        /// are meant to be rendered and shown in third-party applications.
        /// </summary>
        public class RenderaccountissuesRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.RenderAccountIssuesResponse>
        {
            /// <summary>Constructs a new Renderaccountissues request.</summary>
            public RenderaccountissuesRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.RenderAccountIssuesRequestPayload body, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>Required. The ID of the account to fetch issues for.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>
            /// Optional. The [IETF BCP-47](https://tools.ietf.org/html/bcp47) language code used to localize support
            /// content. If not set, the result will be in default language `en-US`.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("languageCode", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string LanguageCode { get; set; }

            /// <summary>
            /// Optional. The [IANA](https://www.iana.org/time-zones) timezone used to localize times in support
            /// content. For example 'America/Los_Angeles'. If not set, results will use as a default UTC.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("timeZone", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string TimeZone { get; set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.RenderAccountIssuesRequestPayload Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "renderaccountissues";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/merchantsupport/renderaccountissues";

            /// <summary>Initializes Renderaccountissues parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("languageCode", new Google.Apis.Discovery.Parameter
                {
                    Name = "languageCode",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("timeZone", new Google.Apis.Discovery.Parameter
                {
                    Name = "timeZone",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Provide a list of issues for merchant's product with a support content and available actions. This content
        /// and actions are meant to be rendered and shown in third-party applications.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">Required. The ID of the account that contains the product.</param>
        /// <param name="productId">
        /// Required. The
        /// [REST_ID](https://developers.google.com/shopping-content/reference/rest/v2.1/products#Product.FIELDS.id) of
        /// the product to fetch issues for.
        /// </param>
        public virtual RenderproductissuesRequest Renderproductissues(Google.Apis.ShoppingContent.v2_1.Data.RenderProductIssuesRequestPayload body, long merchantId, string productId)
        {
            return new RenderproductissuesRequest(this.service, body, merchantId, productId);
        }

        /// <summary>
        /// Provide a list of issues for merchant's product with a support content and available actions. This content
        /// and actions are meant to be rendered and shown in third-party applications.
        /// </summary>
        public class RenderproductissuesRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.RenderProductIssuesResponse>
        {
            /// <summary>Constructs a new Renderproductissues request.</summary>
            public RenderproductissuesRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.RenderProductIssuesRequestPayload body, long merchantId, string productId) : base(service)
            {
                MerchantId = merchantId;
                ProductId = productId;
                Body = body;
                InitParameters();
            }

            /// <summary>Required. The ID of the account that contains the product.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>
            /// Required. The
            /// [REST_ID](https://developers.google.com/shopping-content/reference/rest/v2.1/products#Product.FIELDS.id)
            /// of the product to fetch issues for.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("productId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ProductId { get; private set; }

            /// <summary>
            /// Optional. The [IETF BCP-47](https://tools.ietf.org/html/bcp47) language code used to localize support
            /// content. If not set, the result will be in default language `en-US`.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("languageCode", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string LanguageCode { get; set; }

            /// <summary>
            /// Optional. The [IANA](https://www.iana.org/time-zones) timezone used to localize times in support
            /// content. For example 'America/Los_Angeles'. If not set, results will use as a default UTC.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("timeZone", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string TimeZone { get; set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.RenderProductIssuesRequestPayload Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "renderproductissues";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/merchantsupport/renderproductissues/{productId}";

            /// <summary>Initializes Renderproductissues parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("productId", new Google.Apis.Discovery.Parameter
                {
                    Name = "productId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("languageCode", new Google.Apis.Discovery.Parameter
                {
                    Name = "languageCode",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("timeZone", new Google.Apis.Discovery.Parameter
                {
                    Name = "timeZone",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Start an action. The action can be requested by merchants in third-party application. Before merchants can
        /// request the action, the third-party application needs to show them action specific content and display a
        /// user input form. The action can be successfully started only once all `required` inputs are provided. If any
        /// `required` input is missing, or invalid value was provided, the service will return 400 error. Validation
        /// errors will contain Ids for all problematic field together with translated, human readable error messages
        /// that can be shown to the user.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">Required. The ID of the merchant's account.</param>
        public virtual TriggeractionRequest Triggeraction(Google.Apis.ShoppingContent.v2_1.Data.TriggerActionPayload body, long merchantId)
        {
            return new TriggeractionRequest(this.service, body, merchantId);
        }

        /// <summary>
        /// Start an action. The action can be requested by merchants in third-party application. Before merchants can
        /// request the action, the third-party application needs to show them action specific content and display a
        /// user input form. The action can be successfully started only once all `required` inputs are provided. If any
        /// `required` input is missing, or invalid value was provided, the service will return 400 error. Validation
        /// errors will contain Ids for all problematic field together with translated, human readable error messages
        /// that can be shown to the user.
        /// </summary>
        public class TriggeractionRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.TriggerActionResponse>
        {
            /// <summary>Constructs a new Triggeraction request.</summary>
            public TriggeractionRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.TriggerActionPayload body, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>Required. The ID of the merchant's account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>
            /// Optional. Language code [IETF BCP 47 syntax](https://tools.ietf.org/html/bcp47) used to localize the
            /// response. If not set, the result will be in default language `en-US`.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("languageCode", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string LanguageCode { get; set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.TriggerActionPayload Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "triggeraction";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/merchantsupport/triggeraction";

            /// <summary>Initializes Triggeraction parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("languageCode", new Google.Apis.Discovery.Parameter
                {
                    Name = "languageCode",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "ordertrackingsignals" collection of methods.</summary>
    public class OrdertrackingsignalsResource
    {
        private const string Resource = "ordertrackingsignals";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public OrdertrackingsignalsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Creates new order tracking signal.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">The ID of the merchant for which the order signal is created.</param>
        public virtual CreateRequest Create(Google.Apis.ShoppingContent.v2_1.Data.OrderTrackingSignal body, long merchantId)
        {
            return new CreateRequest(this.service, body, merchantId);
        }

        /// <summary>Creates new order tracking signal.</summary>
        public class CreateRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.OrderTrackingSignal>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.OrderTrackingSignal body, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>The ID of the merchant for which the order signal is created.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.OrderTrackingSignal Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "create";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/ordertrackingsignals";

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "pos" collection of methods.</summary>
    public class PosResource
    {
        private const string Resource = "pos";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public PosResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Batches multiple POS-related calls in a single request.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CustombatchRequest Custombatch(Google.Apis.ShoppingContent.v2_1.Data.PosCustomBatchRequest body)
        {
            return new CustombatchRequest(this.service, body);
        }

        /// <summary>Batches multiple POS-related calls in a single request.</summary>
        public class CustombatchRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.PosCustomBatchResponse>
        {
            /// <summary>Constructs a new Custombatch request.</summary>
            public CustombatchRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.PosCustomBatchRequest body) : base(service)
            {
                Body = body;
                InitParameters();
            }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.PosCustomBatchRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "custombatch";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "pos/batch";

            /// <summary>Initializes Custombatch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
            }
        }

        /// <summary>Deletes a store for the given merchant.</summary>
        /// <param name="merchantId">The ID of the POS or inventory data provider.</param>
        /// <param name="targetMerchantId">The ID of the target merchant.</param>
        /// <param name="storeCode">A store code that is unique per merchant.</param>
        public virtual DeleteRequest Delete(ulong merchantId, ulong targetMerchantId, string storeCode)
        {
            return new DeleteRequest(this.service, merchantId, targetMerchantId, storeCode);
        }

        /// <summary>Deletes a store for the given merchant.</summary>
        public class DeleteRequest : ShoppingContentBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong targetMerchantId, string storeCode) : base(service)
            {
                MerchantId = merchantId;
                TargetMerchantId = targetMerchantId;
                StoreCode = storeCode;
                InitParameters();
            }

            /// <summary>The ID of the POS or inventory data provider.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the target merchant.</summary>
            [Google.Apis.Util.RequestParameterAttribute("targetMerchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong TargetMerchantId { get; private set; }

            /// <summary>A store code that is unique per merchant.</summary>
            [Google.Apis.Util.RequestParameterAttribute("storeCode", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string StoreCode { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "delete";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "DELETE";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/pos/{targetMerchantId}/store/{storeCode}";

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("targetMerchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "targetMerchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("storeCode", new Google.Apis.Discovery.Parameter
                {
                    Name = "storeCode",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Retrieves information about the given store.</summary>
        /// <param name="merchantId">The ID of the POS or inventory data provider.</param>
        /// <param name="targetMerchantId">The ID of the target merchant.</param>
        /// <param name="storeCode">A store code that is unique per merchant.</param>
        public virtual GetRequest Get(ulong merchantId, ulong targetMerchantId, string storeCode)
        {
            return new GetRequest(this.service, merchantId, targetMerchantId, storeCode);
        }

        /// <summary>Retrieves information about the given store.</summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.PosStore>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong targetMerchantId, string storeCode) : base(service)
            {
                MerchantId = merchantId;
                TargetMerchantId = targetMerchantId;
                StoreCode = storeCode;
                InitParameters();
            }

            /// <summary>The ID of the POS or inventory data provider.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the target merchant.</summary>
            [Google.Apis.Util.RequestParameterAttribute("targetMerchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong TargetMerchantId { get; private set; }

            /// <summary>A store code that is unique per merchant.</summary>
            [Google.Apis.Util.RequestParameterAttribute("storeCode", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string StoreCode { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/pos/{targetMerchantId}/store/{storeCode}";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("targetMerchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "targetMerchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("storeCode", new Google.Apis.Discovery.Parameter
                {
                    Name = "storeCode",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Creates a store for the given merchant.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">The ID of the POS or inventory data provider.</param>
        /// <param name="targetMerchantId">The ID of the target merchant.</param>
        public virtual InsertRequest Insert(Google.Apis.ShoppingContent.v2_1.Data.PosStore body, ulong merchantId, ulong targetMerchantId)
        {
            return new InsertRequest(this.service, body, merchantId, targetMerchantId);
        }

        /// <summary>Creates a store for the given merchant.</summary>
        public class InsertRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.PosStore>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.PosStore body, ulong merchantId, ulong targetMerchantId) : base(service)
            {
                MerchantId = merchantId;
                TargetMerchantId = targetMerchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>The ID of the POS or inventory data provider.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the target merchant.</summary>
            [Google.Apis.Util.RequestParameterAttribute("targetMerchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong TargetMerchantId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.PosStore Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "insert";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/pos/{targetMerchantId}/store";

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("targetMerchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "targetMerchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Submit inventory for the given merchant.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">The ID of the POS or inventory data provider.</param>
        /// <param name="targetMerchantId">The ID of the target merchant.</param>
        public virtual InventoryRequest Inventory(Google.Apis.ShoppingContent.v2_1.Data.PosInventoryRequest body, ulong merchantId, ulong targetMerchantId)
        {
            return new InventoryRequest(this.service, body, merchantId, targetMerchantId);
        }

        /// <summary>Submit inventory for the given merchant.</summary>
        public class InventoryRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.PosInventoryResponse>
        {
            /// <summary>Constructs a new Inventory request.</summary>
            public InventoryRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.PosInventoryRequest body, ulong merchantId, ulong targetMerchantId) : base(service)
            {
                MerchantId = merchantId;
                TargetMerchantId = targetMerchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>The ID of the POS or inventory data provider.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the target merchant.</summary>
            [Google.Apis.Util.RequestParameterAttribute("targetMerchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong TargetMerchantId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.PosInventoryRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "inventory";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/pos/{targetMerchantId}/inventory";

            /// <summary>Initializes Inventory parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("targetMerchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "targetMerchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Lists the stores of the target merchant.</summary>
        /// <param name="merchantId">The ID of the POS or inventory data provider.</param>
        /// <param name="targetMerchantId">The ID of the target merchant.</param>
        public virtual ListRequest List(ulong merchantId, ulong targetMerchantId)
        {
            return new ListRequest(this.service, merchantId, targetMerchantId);
        }

        /// <summary>Lists the stores of the target merchant.</summary>
        public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.PosListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong targetMerchantId) : base(service)
            {
                MerchantId = merchantId;
                TargetMerchantId = targetMerchantId;
                InitParameters();
            }

            /// <summary>The ID of the POS or inventory data provider.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the target merchant.</summary>
            [Google.Apis.Util.RequestParameterAttribute("targetMerchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong TargetMerchantId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "list";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/pos/{targetMerchantId}/store";

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("targetMerchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "targetMerchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Submit a sale event for the given merchant.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">The ID of the POS or inventory data provider.</param>
        /// <param name="targetMerchantId">The ID of the target merchant.</param>
        public virtual SaleRequest Sale(Google.Apis.ShoppingContent.v2_1.Data.PosSaleRequest body, ulong merchantId, ulong targetMerchantId)
        {
            return new SaleRequest(this.service, body, merchantId, targetMerchantId);
        }

        /// <summary>Submit a sale event for the given merchant.</summary>
        public class SaleRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.PosSaleResponse>
        {
            /// <summary>Constructs a new Sale request.</summary>
            public SaleRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.PosSaleRequest body, ulong merchantId, ulong targetMerchantId) : base(service)
            {
                MerchantId = merchantId;
                TargetMerchantId = targetMerchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>The ID of the POS or inventory data provider.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the target merchant.</summary>
            [Google.Apis.Util.RequestParameterAttribute("targetMerchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong TargetMerchantId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.PosSaleRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "sale";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/pos/{targetMerchantId}/sale";

            /// <summary>Initializes Sale parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("targetMerchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "targetMerchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "productdeliverytime" collection of methods.</summary>
    public class ProductdeliverytimeResource
    {
        private const string Resource = "productdeliverytime";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ProductdeliverytimeResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Creates or updates the delivery time of a product.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">
        /// The Google merchant ID of the account that contains the product. This account cannot be a multi-client
        /// account.
        /// </param>
        public virtual CreateRequest Create(Google.Apis.ShoppingContent.v2_1.Data.ProductDeliveryTime body, long merchantId)
        {
            return new CreateRequest(this.service, body, merchantId);
        }

        /// <summary>Creates or updates the delivery time of a product.</summary>
        public class CreateRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ProductDeliveryTime>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.ProductDeliveryTime body, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>
            /// The Google merchant ID of the account that contains the product. This account cannot be a multi-client
            /// account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.ProductDeliveryTime Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "create";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/productdeliverytime";

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Deletes the delivery time of a product.</summary>
        /// <param name="merchantId">
        /// Required. The Google merchant ID of the account that contains the product. This account cannot be a
        /// multi-client account.
        /// </param>
        /// <param name="productId">
        /// Required. The Content API ID of the product, in the form `channel:contentLanguage:targetCountry:offerId`.
        /// </param>
        public virtual DeleteRequest Delete(long merchantId, string productId)
        {
            return new DeleteRequest(this.service, merchantId, productId);
        }

        /// <summary>Deletes the delivery time of a product.</summary>
        public class DeleteRequest : ShoppingContentBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, long merchantId, string productId) : base(service)
            {
                MerchantId = merchantId;
                ProductId = productId;
                InitParameters();
            }

            /// <summary>
            /// Required. The Google merchant ID of the account that contains the product. This account cannot be a
            /// multi-client account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>
            /// Required. The Content API ID of the product, in the form
            /// `channel:contentLanguage:targetCountry:offerId`.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("productId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ProductId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "delete";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "DELETE";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/productdeliverytime/{productId}";

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("productId", new Google.Apis.Discovery.Parameter
                {
                    Name = "productId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Gets `productDeliveryTime` by `productId`.</summary>
        /// <param name="merchantId">
        /// Required. The Google merchant ID of the account that contains the product. This account cannot be a
        /// multi-client account.
        /// </param>
        /// <param name="productId">
        /// Required. The Content API ID of the product, in the form `channel:contentLanguage:targetCountry:offerId`.
        /// </param>
        public virtual GetRequest Get(long merchantId, string productId)
        {
            return new GetRequest(this.service, merchantId, productId);
        }

        /// <summary>Gets `productDeliveryTime` by `productId`.</summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ProductDeliveryTime>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, long merchantId, string productId) : base(service)
            {
                MerchantId = merchantId;
                ProductId = productId;
                InitParameters();
            }

            /// <summary>
            /// Required. The Google merchant ID of the account that contains the product. This account cannot be a
            /// multi-client account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>
            /// Required. The Content API ID of the product, in the form
            /// `channel:contentLanguage:targetCountry:offerId`.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("productId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ProductId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/productdeliverytime/{productId}";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("productId", new Google.Apis.Discovery.Parameter
                {
                    Name = "productId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "products" collection of methods.</summary>
    public class ProductsResource
    {
        private const string Resource = "products";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ProductsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Retrieves, inserts, and deletes multiple products in a single request.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CustombatchRequest Custombatch(Google.Apis.ShoppingContent.v2_1.Data.ProductsCustomBatchRequest body)
        {
            return new CustombatchRequest(this.service, body);
        }

        /// <summary>Retrieves, inserts, and deletes multiple products in a single request.</summary>
        public class CustombatchRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ProductsCustomBatchResponse>
        {
            /// <summary>Constructs a new Custombatch request.</summary>
            public CustombatchRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.ProductsCustomBatchRequest body) : base(service)
            {
                Body = body;
                InitParameters();
            }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.ProductsCustomBatchRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "custombatch";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "products/batch";

            /// <summary>Initializes Custombatch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
            }
        }

        /// <summary>Deletes a product from your Merchant Center account.</summary>
        /// <param name="merchantId">
        /// The ID of the account that contains the product. This account cannot be a multi-client account.
        /// </param>
        /// <param name="productId">The REST ID of the product.</param>
        public virtual DeleteRequest Delete(ulong merchantId, string productId)
        {
            return new DeleteRequest(this.service, merchantId, productId);
        }

        /// <summary>Deletes a product from your Merchant Center account.</summary>
        public class DeleteRequest : ShoppingContentBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, ulong merchantId, string productId) : base(service)
            {
                MerchantId = merchantId;
                ProductId = productId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the account that contains the product. This account cannot be a multi-client account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The REST ID of the product.</summary>
            [Google.Apis.Util.RequestParameterAttribute("productId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ProductId { get; private set; }

            /// <summary>
            /// The Content API Supplemental Feed ID. If present then product deletion applies to the data in a
            /// supplemental feed. If absent, entire product will be deleted.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("feedId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<ulong> FeedId { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "delete";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "DELETE";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/products/{productId}";

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("productId", new Google.Apis.Discovery.Parameter
                {
                    Name = "productId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("feedId", new Google.Apis.Discovery.Parameter
                {
                    Name = "feedId",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Retrieves a product from your Merchant Center account.</summary>
        /// <param name="merchantId">
        /// The ID of the account that contains the product. This account cannot be a multi-client account.
        /// </param>
        /// <param name="productId">The REST ID of the product.</param>
        public virtual GetRequest Get(ulong merchantId, string productId)
        {
            return new GetRequest(this.service, merchantId, productId);
        }

        /// <summary>Retrieves a product from your Merchant Center account.</summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.Product>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, ulong merchantId, string productId) : base(service)
            {
                MerchantId = merchantId;
                ProductId = productId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the account that contains the product. This account cannot be a multi-client account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The REST ID of the product.</summary>
            [Google.Apis.Util.RequestParameterAttribute("productId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ProductId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/products/{productId}";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("productId", new Google.Apis.Discovery.Parameter
                {
                    Name = "productId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Uploads a product to your Merchant Center account. If an item with the same channel, contentLanguage,
        /// offerId, and targetCountry already exists, this method updates that entry.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">
        /// The ID of the account that contains the product. This account cannot be a multi-client account.
        /// </param>
        public virtual InsertRequest Insert(Google.Apis.ShoppingContent.v2_1.Data.Product body, ulong merchantId)
        {
            return new InsertRequest(this.service, body, merchantId);
        }

        /// <summary>
        /// Uploads a product to your Merchant Center account. If an item with the same channel, contentLanguage,
        /// offerId, and targetCountry already exists, this method updates that entry.
        /// </summary>
        public class InsertRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.Product>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.Product body, ulong merchantId) : base(service)
            {
                MerchantId = merchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>
            /// The ID of the account that contains the product. This account cannot be a multi-client account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>
            /// The Content API Supplemental Feed ID. If present then product insertion applies to the data in a
            /// supplemental feed.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("feedId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<ulong> FeedId { get; set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.Product Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "insert";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/products";

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("feedId", new Google.Apis.Discovery.Parameter
                {
                    Name = "feedId",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Lists the products in your Merchant Center account. The response might contain fewer items than specified by
        /// maxResults. Rely on nextPageToken to determine if there are more items to be requested.
        /// </summary>
        /// <param name="merchantId">
        /// The ID of the account that contains the products. This account cannot be a multi-client account.
        /// </param>
        public virtual ListRequest List(ulong merchantId)
        {
            return new ListRequest(this.service, merchantId);
        }

        /// <summary>
        /// Lists the products in your Merchant Center account. The response might contain fewer items than specified by
        /// maxResults. Rely on nextPageToken to determine if there are more items to be requested.
        /// </summary>
        public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ProductsListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, ulong merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the account that contains the products. This account cannot be a multi-client account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>
            /// The maximum number of products to return in the response, used for paging. The default value is 25. The
            /// maximum value is 250.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>The token returned by the previous request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "list";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/products";

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("maxResults", new Google.Apis.Discovery.Parameter
                {
                    Name = "maxResults",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageToken",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Updates an existing product in your Merchant Center account. Only updates attributes provided in the
        /// request.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">
        /// The ID of the account that contains the product. This account cannot be a multi-client account.
        /// </param>
        /// <param name="productId">The REST ID of the product for which to update.</param>
        public virtual UpdateRequest Update(Google.Apis.ShoppingContent.v2_1.Data.Product body, ulong merchantId, string productId)
        {
            return new UpdateRequest(this.service, body, merchantId, productId);
        }

        /// <summary>
        /// Updates an existing product in your Merchant Center account. Only updates attributes provided in the
        /// request.
        /// </summary>
        public class UpdateRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.Product>
        {
            /// <summary>Constructs a new Update request.</summary>
            public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.Product body, ulong merchantId, string productId) : base(service)
            {
                MerchantId = merchantId;
                ProductId = productId;
                Body = body;
                InitParameters();
            }

            /// <summary>
            /// The ID of the account that contains the product. This account cannot be a multi-client account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The REST ID of the product for which to update.</summary>
            [Google.Apis.Util.RequestParameterAttribute("productId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ProductId { get; private set; }

            /// <summary>
            /// The comma-separated list of product attributes to be updated. Example: `"title,salePrice"`. Attributes
            /// specified in the update mask without a value specified in the body will be deleted from the product.
            /// *You must specify the update mask to delete attributes.* Only top-level product attributes can be
            /// updated. If not defined, product attributes with set values will be updated and other attributes will
            /// stay unchanged.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("updateMask", Google.Apis.Util.RequestParameterType.Query)]
            public virtual object UpdateMask { get; set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.Product Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "update";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "PATCH";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/products/{productId}";

            /// <summary>Initializes Update parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("productId", new Google.Apis.Discovery.Parameter
                {
                    Name = "productId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("updateMask", new Google.Apis.Discovery.Parameter
                {
                    Name = "updateMask",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "productstatuses" collection of methods.</summary>
    public class ProductstatusesResource
    {
        private const string Resource = "productstatuses";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ProductstatusesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Gets the statuses of multiple products in a single request.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CustombatchRequest Custombatch(Google.Apis.ShoppingContent.v2_1.Data.ProductstatusesCustomBatchRequest body)
        {
            return new CustombatchRequest(this.service, body);
        }

        /// <summary>Gets the statuses of multiple products in a single request.</summary>
        public class CustombatchRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ProductstatusesCustomBatchResponse>
        {
            /// <summary>Constructs a new Custombatch request.</summary>
            public CustombatchRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.ProductstatusesCustomBatchRequest body) : base(service)
            {
                Body = body;
                InitParameters();
            }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.ProductstatusesCustomBatchRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "custombatch";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "productstatuses/batch";

            /// <summary>Initializes Custombatch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
            }
        }

        /// <summary>Gets the status of a product from your Merchant Center account.</summary>
        /// <param name="merchantId">
        /// The ID of the account that contains the product. This account cannot be a multi-client account.
        /// </param>
        /// <param name="productId">The REST ID of the product.</param>
        public virtual GetRequest Get(ulong merchantId, string productId)
        {
            return new GetRequest(this.service, merchantId, productId);
        }

        /// <summary>Gets the status of a product from your Merchant Center account.</summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ProductStatus>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, ulong merchantId, string productId) : base(service)
            {
                MerchantId = merchantId;
                ProductId = productId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the account that contains the product. This account cannot be a multi-client account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The REST ID of the product.</summary>
            [Google.Apis.Util.RequestParameterAttribute("productId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ProductId { get; private set; }

            /// <summary>
            /// If set, only issues for the specified destinations are returned, otherwise only issues for the Shopping
            /// destination.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("destinations", Google.Apis.Util.RequestParameterType.Query)]
            public virtual Google.Apis.Util.Repeatable<string> Destinations { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/productstatuses/{productId}";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("productId", new Google.Apis.Discovery.Parameter
                {
                    Name = "productId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("destinations", new Google.Apis.Discovery.Parameter
                {
                    Name = "destinations",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Lists the statuses of the products in your Merchant Center account.</summary>
        /// <param name="merchantId">
        /// The ID of the account that contains the products. This account cannot be a multi-client account.
        /// </param>
        public virtual ListRequest List(ulong merchantId)
        {
            return new ListRequest(this.service, merchantId);
        }

        /// <summary>Lists the statuses of the products in your Merchant Center account.</summary>
        public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ProductstatusesListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, ulong merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the account that contains the products. This account cannot be a multi-client account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>
            /// If set, only issues for the specified destinations are returned, otherwise only issues for the Shopping
            /// destination.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("destinations", Google.Apis.Util.RequestParameterType.Query)]
            public virtual Google.Apis.Util.Repeatable<string> Destinations { get; set; }

            /// <summary>
            /// The maximum number of product statuses to return in the response, used for paging. The default value is
            /// 25. The maximum value is 250.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>The token returned by the previous request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "list";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/productstatuses";

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("destinations", new Google.Apis.Discovery.Parameter
                {
                    Name = "destinations",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("maxResults", new Google.Apis.Discovery.Parameter
                {
                    Name = "maxResults",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageToken",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "promotions" collection of methods.</summary>
    public class PromotionsResource
    {
        private const string Resource = "promotions";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public PromotionsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>
        /// Inserts a promotion for your Merchant Center account. If the promotion already exists, then it updates the
        /// promotion instead. To [end or delete]
        /// (https://developers.google.com/shopping-content/guides/promotions#end_a_promotion) a promotion update the
        /// time period of the promotion to a time that has already passed.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">Required. The ID of the account that contains the collection.</param>
        public virtual CreateRequest Create(Google.Apis.ShoppingContent.v2_1.Data.Promotion body, long merchantId)
        {
            return new CreateRequest(this.service, body, merchantId);
        }

        /// <summary>
        /// Inserts a promotion for your Merchant Center account. If the promotion already exists, then it updates the
        /// promotion instead. To [end or delete]
        /// (https://developers.google.com/shopping-content/guides/promotions#end_a_promotion) a promotion update the
        /// time period of the promotion to a time that has already passed.
        /// </summary>
        public class CreateRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.Promotion>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.Promotion body, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>Required. The ID of the account that contains the collection.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.Promotion Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "create";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/promotions";

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Retrieves a promotion from your Merchant Center account.</summary>
        /// <param name="merchantId">Required. The ID of the account that contains the collection.</param>
        /// <param name="id">Required. REST ID of the promotion to retrieve.</param>
        public virtual GetRequest Get(long merchantId, string id)
        {
            return new GetRequest(this.service, merchantId, id);
        }

        /// <summary>Retrieves a promotion from your Merchant Center account.</summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.Promotion>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, long merchantId, string id) : base(service)
            {
                MerchantId = merchantId;
                Id = id;
                InitParameters();
            }

            /// <summary>Required. The ID of the account that contains the collection.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Required. REST ID of the promotion to retrieve.</summary>
            [Google.Apis.Util.RequestParameterAttribute("id", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Id { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/promotions/{id}";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("id", new Google.Apis.Discovery.Parameter
                {
                    Name = "id",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>List all promotions from your Merchant Center account.</summary>
        /// <param name="merchantId">Required. The ID of the account that contains the collection.</param>
        public virtual ListRequest List(long merchantId)
        {
            return new ListRequest(this.service, merchantId);
        }

        /// <summary>List all promotions from your Merchant Center account.</summary>
        public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ListPromotionResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>Required. The ID of the account that contains the collection.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>
            /// [CLDR country code](http://www.unicode.org/repos/cldr/tags/latest/common/main/en.xml) (for example,
            /// "US"), used as a filter on promotions target country.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("countryCode", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string CountryCode { get; set; }

            /// <summary>
            /// The two-letter ISO 639-1 language code associated with the promotions, used as a filter.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("languageCode", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string LanguageCode { get; set; }

            /// <summary>
            /// The maximum number of promotions to return. The service may return fewer than this value. If
            /// unspecified, at most 50 labels will be returned. The maximum value is 1000; values above 1000 will be
            /// coerced to 1000.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> PageSize { get; set; }

            /// <summary>
            /// A page token, received from a previous `ListPromotion` call. Provide this to retrieve the subsequent
            /// page. When paginating, all other parameters provided to `ListPromotion` must match the call that
            /// provided the page token.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "list";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/promotions";

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("countryCode", new Google.Apis.Discovery.Parameter
                {
                    Name = "countryCode",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("languageCode", new Google.Apis.Discovery.Parameter
                {
                    Name = "languageCode",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageSize", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageSize",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageToken",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "pubsubnotificationsettings" collection of methods.</summary>
    public class PubsubnotificationsettingsResource
    {
        private const string Resource = "pubsubnotificationsettings";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public PubsubnotificationsettingsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Retrieves a Merchant Center account's pubsub notification settings.</summary>
        /// <param name="merchantId">The ID of the account for which to get pubsub notification settings.</param>
        public virtual GetRequest Get(ulong merchantId)
        {
            return new GetRequest(this.service, merchantId);
        }

        /// <summary>Retrieves a Merchant Center account's pubsub notification settings.</summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.PubsubNotificationSettings>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, ulong merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>The ID of the account for which to get pubsub notification settings.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/pubsubnotificationsettings";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Register a Merchant Center account for pubsub notifications. Note that cloud topic name shouldn't be
        /// provided as part of the request.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">The ID of the account.</param>
        public virtual UpdateRequest Update(Google.Apis.ShoppingContent.v2_1.Data.PubsubNotificationSettings body, ulong merchantId)
        {
            return new UpdateRequest(this.service, body, merchantId);
        }

        /// <summary>
        /// Register a Merchant Center account for pubsub notifications. Note that cloud topic name shouldn't be
        /// provided as part of the request.
        /// </summary>
        public class UpdateRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.PubsubNotificationSettings>
        {
            /// <summary>Constructs a new Update request.</summary>
            public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.PubsubNotificationSettings body, ulong merchantId) : base(service)
            {
                MerchantId = merchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>The ID of the account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.PubsubNotificationSettings Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "update";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "PUT";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/pubsubnotificationsettings";

            /// <summary>Initializes Update parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "quotas" collection of methods.</summary>
    public class QuotasResource
    {
        private const string Resource = "quotas";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public QuotasResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Lists the daily call quota and usage per method for your Merchant Center account.</summary>
        /// <param name="merchantId">
        /// Required. The ID of the account that has quota. This account must be an admin.
        /// </param>
        public virtual ListRequest List(long merchantId)
        {
            return new ListRequest(this.service, merchantId);
        }

        /// <summary>Lists the daily call quota and usage per method for your Merchant Center account.</summary>
        public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ListMethodQuotasResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>Required. The ID of the account that has quota. This account must be an admin.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>
            /// The maximum number of quotas to return in the response, used for paging. Defaults to 500; values above
            /// 1000 will be coerced to 1000.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> PageSize { get; set; }

            /// <summary>
            /// Token (if provided) to retrieve the subsequent page. All other parameters must match the original call
            /// that provided the page token.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "list";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/quotas";

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageSize", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageSize",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageToken",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "recommendations" collection of methods.</summary>
    public class RecommendationsResource
    {
        private const string Resource = "recommendations";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public RecommendationsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Generates recommendations for a merchant.</summary>
        /// <param name="merchantId">Required. The ID of the account to fetch recommendations for.</param>
        public virtual GenerateRequest Generate(long merchantId)
        {
            return new GenerateRequest(this.service, merchantId);
        }

        /// <summary>Generates recommendations for a merchant.</summary>
        public class GenerateRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.GenerateRecommendationsResponse>
        {
            /// <summary>Constructs a new Generate request.</summary>
            public GenerateRequest(Google.Apis.Services.IClientService service, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>Required. The ID of the account to fetch recommendations for.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>
            /// Optional. List of allowed tags. Tags are a set of predefined strings that describe the category that
            /// individual recommendation types belong to. User can specify zero or more tags in this field to indicate
            /// what categories of recommendations they want to receive. Current list of supported tags: - TREND
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("allowedTag", Google.Apis.Util.RequestParameterType.Query)]
            public virtual Google.Apis.Util.Repeatable<string> AllowedTag { get; set; }

            /// <summary>
            /// Optional. Language code of the client. If not set, the result will be in default language (English).
            /// This language code affects all fields prefixed with "localized". This should be set to ISO 639-1 country
            /// code. List of currently verified supported language code: en, fr, cs, da, de, es, it, nl, no, pl, pt,
            /// pt, fi, sv, vi, tr, th, ko, zh-CN, zh-TW, ja, id, hi
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("languageCode", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string LanguageCode { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "generate";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/recommendations/generate";

            /// <summary>Initializes Generate parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("allowedTag", new Google.Apis.Discovery.Parameter
                {
                    Name = "allowedTag",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("languageCode", new Google.Apis.Discovery.Parameter
                {
                    Name = "languageCode",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Reports an interaction on a recommendation for a merchant.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">Required. The ID of the account that wants to report an interaction.</param>
        public virtual ReportInteractionRequest ReportInteraction(Google.Apis.ShoppingContent.v2_1.Data.ReportInteractionRequest body, long merchantId)
        {
            return new ReportInteractionRequest(this.service, body, merchantId);
        }

        /// <summary>Reports an interaction on a recommendation for a merchant.</summary>
        public class ReportInteractionRequest : ShoppingContentBaseServiceRequest<string>
        {
            /// <summary>Constructs a new ReportInteraction request.</summary>
            public ReportInteractionRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.ReportInteractionRequest body, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>Required. The ID of the account that wants to report an interaction.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.ReportInteractionRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "reportInteraction";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/recommendations/reportInteraction";

            /// <summary>Initializes ReportInteraction parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "regionalinventory" collection of methods.</summary>
    public class RegionalinventoryResource
    {
        private const string Resource = "regionalinventory";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public RegionalinventoryResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Updates regional inventory for multiple products or regions in a single request.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CustombatchRequest Custombatch(Google.Apis.ShoppingContent.v2_1.Data.RegionalinventoryCustomBatchRequest body)
        {
            return new CustombatchRequest(this.service, body);
        }

        /// <summary>Updates regional inventory for multiple products or regions in a single request.</summary>
        public class CustombatchRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.RegionalinventoryCustomBatchResponse>
        {
            /// <summary>Constructs a new Custombatch request.</summary>
            public CustombatchRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.RegionalinventoryCustomBatchRequest body) : base(service)
            {
                Body = body;
                InitParameters();
            }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.RegionalinventoryCustomBatchRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "custombatch";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "regionalinventory/batch";

            /// <summary>Initializes Custombatch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
            }
        }

        /// <summary>
        /// Updates the regional inventory of a product in your Merchant Center account. If a regional inventory with
        /// the same region ID already exists, this method updates that entry.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">
        /// The ID of the account that contains the product. This account cannot be a multi-client account.
        /// </param>
        /// <param name="productId">The REST ID of the product for which to update the regional inventory.</param>
        public virtual InsertRequest Insert(Google.Apis.ShoppingContent.v2_1.Data.RegionalInventory body, ulong merchantId, string productId)
        {
            return new InsertRequest(this.service, body, merchantId, productId);
        }

        /// <summary>
        /// Updates the regional inventory of a product in your Merchant Center account. If a regional inventory with
        /// the same region ID already exists, this method updates that entry.
        /// </summary>
        public class InsertRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.RegionalInventory>
        {
            /// <summary>Constructs a new Insert request.</summary>
            public InsertRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.RegionalInventory body, ulong merchantId, string productId) : base(service)
            {
                MerchantId = merchantId;
                ProductId = productId;
                Body = body;
                InitParameters();
            }

            /// <summary>
            /// The ID of the account that contains the product. This account cannot be a multi-client account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The REST ID of the product for which to update the regional inventory.</summary>
            [Google.Apis.Util.RequestParameterAttribute("productId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ProductId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.RegionalInventory Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "insert";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/products/{productId}/regionalinventory";

            /// <summary>Initializes Insert parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("productId", new Google.Apis.Discovery.Parameter
                {
                    Name = "productId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "regions" collection of methods.</summary>
    public class RegionsResource
    {
        private const string Resource = "regions";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public RegionsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Creates a region definition in your Merchant Center account.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">Required. The id of the merchant for which to create region definition.</param>
        public virtual CreateRequest Create(Google.Apis.ShoppingContent.v2_1.Data.Region body, long merchantId)
        {
            return new CreateRequest(this.service, body, merchantId);
        }

        /// <summary>Creates a region definition in your Merchant Center account.</summary>
        public class CreateRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.Region>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.Region body, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>Required. The id of the merchant for which to create region definition.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Required. The id of the region to create.</summary>
            [Google.Apis.Util.RequestParameterAttribute("regionId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string RegionId { get; set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.Region Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "create";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/regions";

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("regionId", new Google.Apis.Discovery.Parameter
                {
                    Name = "regionId",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Deletes a region definition from your Merchant Center account.</summary>
        /// <param name="merchantId">Required. The id of the merchant for which to delete region definition.</param>
        /// <param name="regionId">Required. The id of the region to delete.</param>
        public virtual DeleteRequest Delete(long merchantId, string regionId)
        {
            return new DeleteRequest(this.service, merchantId, regionId);
        }

        /// <summary>Deletes a region definition from your Merchant Center account.</summary>
        public class DeleteRequest : ShoppingContentBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, long merchantId, string regionId) : base(service)
            {
                MerchantId = merchantId;
                RegionId = regionId;
                InitParameters();
            }

            /// <summary>Required. The id of the merchant for which to delete region definition.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Required. The id of the region to delete.</summary>
            [Google.Apis.Util.RequestParameterAttribute("regionId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string RegionId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "delete";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "DELETE";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/regions/{regionId}";

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("regionId", new Google.Apis.Discovery.Parameter
                {
                    Name = "regionId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Retrieves a region defined in your Merchant Center account.</summary>
        /// <param name="merchantId">Required. The id of the merchant for which to retrieve region definition.</param>
        /// <param name="regionId">Required. The id of the region to retrieve.</param>
        public virtual GetRequest Get(long merchantId, string regionId)
        {
            return new GetRequest(this.service, merchantId, regionId);
        }

        /// <summary>Retrieves a region defined in your Merchant Center account.</summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.Region>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, long merchantId, string regionId) : base(service)
            {
                MerchantId = merchantId;
                RegionId = regionId;
                InitParameters();
            }

            /// <summary>Required. The id of the merchant for which to retrieve region definition.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Required. The id of the region to retrieve.</summary>
            [Google.Apis.Util.RequestParameterAttribute("regionId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string RegionId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/regions/{regionId}";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("regionId", new Google.Apis.Discovery.Parameter
                {
                    Name = "regionId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Lists the regions in your Merchant Center account.</summary>
        /// <param name="merchantId">Required. The id of the merchant for which to list region definitions.</param>
        public virtual ListRequest List(long merchantId)
        {
            return new ListRequest(this.service, merchantId);
        }

        /// <summary>Lists the regions in your Merchant Center account.</summary>
        public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ListRegionsResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>Required. The id of the merchant for which to list region definitions.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>
            /// The maximum number of regions to return. The service may return fewer than this value. If unspecified,
            /// at most 50 rules will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> PageSize { get; set; }

            /// <summary>
            /// A page token, received from a previous `ListRegions` call. Provide this to retrieve the subsequent page.
            /// When paginating, all other parameters provided to `ListRegions` must match the call that provided the
            /// page token.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "list";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/regions";

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageSize", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageSize",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageToken",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Updates a region definition in your Merchant Center account.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">Required. The id of the merchant for which to update region definition.</param>
        /// <param name="regionId">Required. The id of the region to update.</param>
        public virtual PatchRequest Patch(Google.Apis.ShoppingContent.v2_1.Data.Region body, long merchantId, string regionId)
        {
            return new PatchRequest(this.service, body, merchantId, regionId);
        }

        /// <summary>Updates a region definition in your Merchant Center account.</summary>
        public class PatchRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.Region>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.Region body, long merchantId, string regionId) : base(service)
            {
                MerchantId = merchantId;
                RegionId = regionId;
                Body = body;
                InitParameters();
            }

            /// <summary>Required. The id of the merchant for which to update region definition.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Required. The id of the region to update.</summary>
            [Google.Apis.Util.RequestParameterAttribute("regionId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string RegionId { get; private set; }

            /// <summary>
            /// Optional. The comma-separated field mask indicating the fields to update. Example:
            /// `"displayName,postalCodeArea.regionCode"`.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("updateMask", Google.Apis.Util.RequestParameterType.Query)]
            public virtual object UpdateMask { get; set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.Region Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "patch";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "PATCH";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/regions/{regionId}";

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("regionId", new Google.Apis.Discovery.Parameter
                {
                    Name = "regionId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("updateMask", new Google.Apis.Discovery.Parameter
                {
                    Name = "updateMask",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "reports" collection of methods.</summary>
    public class ReportsResource
    {
        private const string Resource = "reports";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ReportsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>
        /// Retrieves merchant performance metrics matching the search query and optionally segmented by selected
        /// dimensions.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">
        /// Required. Id of the merchant making the call. Must be a standalone account or an MCA subaccount.
        /// </param>
        public virtual SearchRequest Search(Google.Apis.ShoppingContent.v2_1.Data.SearchRequest body, long merchantId)
        {
            return new SearchRequest(this.service, body, merchantId);
        }

        /// <summary>
        /// Retrieves merchant performance metrics matching the search query and optionally segmented by selected
        /// dimensions.
        /// </summary>
        public class SearchRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.SearchResponse>
        {
            /// <summary>Constructs a new Search request.</summary>
            public SearchRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.SearchRequest body, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>
            /// Required. Id of the merchant making the call. Must be a standalone account or an MCA subaccount.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.SearchRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "search";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/reports/search";

            /// <summary>Initializes Search parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "returnpolicyonline" collection of methods.</summary>
    public class ReturnpolicyonlineResource
    {
        private const string Resource = "returnpolicyonline";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ReturnpolicyonlineResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Creates a new return policy.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">
        /// Required. The id of the merchant for which to retrieve the return policy online object.
        /// </param>
        public virtual CreateRequest Create(Google.Apis.ShoppingContent.v2_1.Data.ReturnPolicyOnline body, long merchantId)
        {
            return new CreateRequest(this.service, body, merchantId);
        }

        /// <summary>Creates a new return policy.</summary>
        public class CreateRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ReturnPolicyOnline>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.ReturnPolicyOnline body, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>
            /// Required. The id of the merchant for which to retrieve the return policy online object.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.ReturnPolicyOnline Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "create";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/returnpolicyonline";

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Deletes an existing return policy.</summary>
        /// <param name="merchantId">
        /// Required. The id of the merchant for which to retrieve the return policy online object.
        /// </param>
        /// <param name="returnPolicyId">Required. The id of the return policy to delete.</param>
        public virtual DeleteRequest Delete(long merchantId, string returnPolicyId)
        {
            return new DeleteRequest(this.service, merchantId, returnPolicyId);
        }

        /// <summary>Deletes an existing return policy.</summary>
        public class DeleteRequest : ShoppingContentBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, long merchantId, string returnPolicyId) : base(service)
            {
                MerchantId = merchantId;
                ReturnPolicyId = returnPolicyId;
                InitParameters();
            }

            /// <summary>
            /// Required. The id of the merchant for which to retrieve the return policy online object.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Required. The id of the return policy to delete.</summary>
            [Google.Apis.Util.RequestParameterAttribute("returnPolicyId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ReturnPolicyId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "delete";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "DELETE";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/returnpolicyonline/{returnPolicyId}";

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("returnPolicyId", new Google.Apis.Discovery.Parameter
                {
                    Name = "returnPolicyId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Gets an existing return policy.</summary>
        /// <param name="merchantId">
        /// Required. The id of the merchant for which to retrieve the return policy online object.
        /// </param>
        /// <param name="returnPolicyId">Required. The id of the return policy to retrieve.</param>
        public virtual GetRequest Get(long merchantId, string returnPolicyId)
        {
            return new GetRequest(this.service, merchantId, returnPolicyId);
        }

        /// <summary>Gets an existing return policy.</summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ReturnPolicyOnline>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, long merchantId, string returnPolicyId) : base(service)
            {
                MerchantId = merchantId;
                ReturnPolicyId = returnPolicyId;
                InitParameters();
            }

            /// <summary>
            /// Required. The id of the merchant for which to retrieve the return policy online object.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Required. The id of the return policy to retrieve.</summary>
            [Google.Apis.Util.RequestParameterAttribute("returnPolicyId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ReturnPolicyId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/returnpolicyonline/{returnPolicyId}";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("returnPolicyId", new Google.Apis.Discovery.Parameter
                {
                    Name = "returnPolicyId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Lists all existing return policies.</summary>
        /// <param name="merchantId">
        /// Required. The id of the merchant for which to retrieve the return policy online object.
        /// </param>
        public virtual ListRequest List(long merchantId)
        {
            return new ListRequest(this.service, merchantId);
        }

        /// <summary>Lists all existing return policies.</summary>
        public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ListReturnPolicyOnlineResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>
            /// Required. The id of the merchant for which to retrieve the return policy online object.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "list";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/returnpolicyonline";

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Updates an existing return policy.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">
        /// Required. The id of the merchant for which to retrieve the return policy online object.
        /// </param>
        /// <param name="returnPolicyId">Required. The id of the return policy to update.</param>
        public virtual PatchRequest Patch(Google.Apis.ShoppingContent.v2_1.Data.ReturnPolicyOnline body, long merchantId, string returnPolicyId)
        {
            return new PatchRequest(this.service, body, merchantId, returnPolicyId);
        }

        /// <summary>Updates an existing return policy.</summary>
        public class PatchRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ReturnPolicyOnline>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.ReturnPolicyOnline body, long merchantId, string returnPolicyId) : base(service)
            {
                MerchantId = merchantId;
                ReturnPolicyId = returnPolicyId;
                Body = body;
                InitParameters();
            }

            /// <summary>
            /// Required. The id of the merchant for which to retrieve the return policy online object.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Required. The id of the return policy to update.</summary>
            [Google.Apis.Util.RequestParameterAttribute("returnPolicyId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ReturnPolicyId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.ReturnPolicyOnline Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "patch";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "PATCH";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/returnpolicyonline/{returnPolicyId}";

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("returnPolicyId", new Google.Apis.Discovery.Parameter
                {
                    Name = "returnPolicyId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "shippingsettings" collection of methods.</summary>
    public class ShippingsettingsResource
    {
        private const string Resource = "shippingsettings";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ShippingsettingsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>Retrieves and updates the shipping settings of multiple accounts in a single request.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CustombatchRequest Custombatch(Google.Apis.ShoppingContent.v2_1.Data.ShippingsettingsCustomBatchRequest body)
        {
            return new CustombatchRequest(this.service, body);
        }

        /// <summary>Retrieves and updates the shipping settings of multiple accounts in a single request.</summary>
        public class CustombatchRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ShippingsettingsCustomBatchResponse>
        {
            /// <summary>Constructs a new Custombatch request.</summary>
            public CustombatchRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.ShippingsettingsCustomBatchRequest body) : base(service)
            {
                Body = body;
                InitParameters();
            }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.ShippingsettingsCustomBatchRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "custombatch";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "shippingsettings/batch";

            /// <summary>Initializes Custombatch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
            }
        }

        /// <summary>Retrieves the shipping settings of the account.</summary>
        /// <param name="merchantId">
        /// The ID of the managing account. If this parameter is not the same as accountId, then this account must be a
        /// multi-client account and `accountId` must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">The ID of the account for which to get/update shipping settings.</param>
        public virtual GetRequest Get(ulong merchantId, ulong accountId)
        {
            return new GetRequest(this.service, merchantId, accountId);
        }

        /// <summary>Retrieves the shipping settings of the account.</summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ShippingSettings>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, ulong merchantId, ulong accountId) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                InitParameters();
            }

            /// <summary>
            /// The ID of the managing account. If this parameter is not the same as accountId, then this account must
            /// be a multi-client account and `accountId` must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account for which to get/update shipping settings.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/shippingsettings/{accountId}";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Retrieves supported carriers and carrier services for an account.</summary>
        /// <param name="merchantId">The ID of the account for which to retrieve the supported carriers.</param>
        public virtual GetsupportedcarriersRequest Getsupportedcarriers(ulong merchantId)
        {
            return new GetsupportedcarriersRequest(this.service, merchantId);
        }

        /// <summary>Retrieves supported carriers and carrier services for an account.</summary>
        public class GetsupportedcarriersRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ShippingsettingsGetSupportedCarriersResponse>
        {
            /// <summary>Constructs a new Getsupportedcarriers request.</summary>
            public GetsupportedcarriersRequest(Google.Apis.Services.IClientService service, ulong merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>The ID of the account for which to retrieve the supported carriers.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "getsupportedcarriers";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/supportedCarriers";

            /// <summary>Initializes Getsupportedcarriers parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Retrieves supported holidays for an account.</summary>
        /// <param name="merchantId">The ID of the account for which to retrieve the supported holidays.</param>
        public virtual GetsupportedholidaysRequest Getsupportedholidays(ulong merchantId)
        {
            return new GetsupportedholidaysRequest(this.service, merchantId);
        }

        /// <summary>Retrieves supported holidays for an account.</summary>
        public class GetsupportedholidaysRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ShippingsettingsGetSupportedHolidaysResponse>
        {
            /// <summary>Constructs a new Getsupportedholidays request.</summary>
            public GetsupportedholidaysRequest(Google.Apis.Services.IClientService service, ulong merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>The ID of the account for which to retrieve the supported holidays.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "getsupportedholidays";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/supportedHolidays";

            /// <summary>Initializes Getsupportedholidays parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Retrieves supported pickup services for an account.</summary>
        /// <param name="merchantId">The ID of the account for which to retrieve the supported pickup services.</param>
        public virtual GetsupportedpickupservicesRequest Getsupportedpickupservices(ulong merchantId)
        {
            return new GetsupportedpickupservicesRequest(this.service, merchantId);
        }

        /// <summary>Retrieves supported pickup services for an account.</summary>
        public class GetsupportedpickupservicesRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ShippingsettingsGetSupportedPickupServicesResponse>
        {
            /// <summary>Constructs a new Getsupportedpickupservices request.</summary>
            public GetsupportedpickupservicesRequest(Google.Apis.Services.IClientService service, ulong merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>The ID of the account for which to retrieve the supported pickup services.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "getsupportedpickupservices";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/supportedPickupServices";

            /// <summary>Initializes Getsupportedpickupservices parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>Lists the shipping settings of the sub-accounts in your Merchant Center account.</summary>
        /// <param name="merchantId">The ID of the managing account. This must be a multi-client account.</param>
        public virtual ListRequest List(ulong merchantId)
        {
            return new ListRequest(this.service, merchantId);
        }

        /// <summary>Lists the shipping settings of the sub-accounts in your Merchant Center account.</summary>
        public class ListRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ShippingsettingsListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, ulong merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>The ID of the managing account. This must be a multi-client account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The maximum number of shipping settings to return in the response, used for paging.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<long> MaxResults { get; set; }

            /// <summary>The token returned by the previous request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "list";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/shippingsettings";

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("maxResults", new Google.Apis.Discovery.Parameter
                {
                    Name = "maxResults",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("pageToken", new Google.Apis.Discovery.Parameter
                {
                    Name = "pageToken",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Updates the shipping settings of the account. Any fields that are not provided are deleted from the
        /// resource.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">
        /// The ID of the managing account. If this parameter is not the same as accountId, then this account must be a
        /// multi-client account and `accountId` must be the ID of a sub-account of this account.
        /// </param>
        /// <param name="accountId">The ID of the account for which to get/update shipping settings.</param>
        public virtual UpdateRequest Update(Google.Apis.ShoppingContent.v2_1.Data.ShippingSettings body, ulong merchantId, ulong accountId)
        {
            return new UpdateRequest(this.service, body, merchantId, accountId);
        }

        /// <summary>
        /// Updates the shipping settings of the account. Any fields that are not provided are deleted from the
        /// resource.
        /// </summary>
        public class UpdateRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ShippingSettings>
        {
            /// <summary>Constructs a new Update request.</summary>
            public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.ShippingSettings body, ulong merchantId, ulong accountId) : base(service)
            {
                MerchantId = merchantId;
                AccountId = accountId;
                Body = body;
                InitParameters();
            }

            /// <summary>
            /// The ID of the managing account. If this parameter is not the same as accountId, then this account must
            /// be a multi-client account and `accountId` must be the ID of a sub-account of this account.
            /// </summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong MerchantId { get; private set; }

            /// <summary>The ID of the account for which to get/update shipping settings.</summary>
            [Google.Apis.Util.RequestParameterAttribute("accountId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual ulong AccountId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.ShippingSettings Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "update";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "PUT";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/shippingsettings/{accountId}";

            /// <summary>Initializes Update parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
                RequestParameters.Add("accountId", new Google.Apis.Discovery.Parameter
                {
                    Name = "accountId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }

    /// <summary>The "shoppingadsprogram" collection of methods.</summary>
    public class ShoppingadsprogramResource
    {
        private const string Resource = "shoppingadsprogram";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ShoppingadsprogramResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
        }

        /// <summary>
        /// Retrieves the status and review eligibility for the Shopping Ads program. Returns errors and warnings if
        /// they require action to resolve, will become disapprovals, or impact impressions. Use `accountstatuses` to
        /// view all issues for an account.
        /// </summary>
        /// <param name="merchantId">Required. The ID of the account.</param>
        public virtual GetRequest Get(long merchantId)
        {
            return new GetRequest(this.service, merchantId);
        }

        /// <summary>
        /// Retrieves the status and review eligibility for the Shopping Ads program. Returns errors and warnings if
        /// they require action to resolve, will become disapprovals, or impact impressions. Use `accountstatuses` to
        /// view all issues for an account.
        /// </summary>
        public class GetRequest : ShoppingContentBaseServiceRequest<Google.Apis.ShoppingContent.v2_1.Data.ShoppingAdsProgramStatus>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                InitParameters();
            }

            /// <summary>Required. The ID of the account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "get";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "GET";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/shoppingadsprogram";

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }

        /// <summary>
        /// Requests a review of Shopping ads in a specific region. This method deprecated. Use the
        /// `MerchantSupportService` to view product and account issues and request a review.
        /// </summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="merchantId">Required. The ID of the account.</param>
        public virtual RequestreviewRequest Requestreview(Google.Apis.ShoppingContent.v2_1.Data.RequestReviewShoppingAdsRequest body, long merchantId)
        {
            return new RequestreviewRequest(this.service, body, merchantId);
        }

        /// <summary>
        /// Requests a review of Shopping ads in a specific region. This method deprecated. Use the
        /// `MerchantSupportService` to view product and account issues and request a review.
        /// </summary>
        public class RequestreviewRequest : ShoppingContentBaseServiceRequest<string>
        {
            /// <summary>Constructs a new Requestreview request.</summary>
            public RequestreviewRequest(Google.Apis.Services.IClientService service, Google.Apis.ShoppingContent.v2_1.Data.RequestReviewShoppingAdsRequest body, long merchantId) : base(service)
            {
                MerchantId = merchantId;
                Body = body;
                InitParameters();
            }

            /// <summary>Required. The ID of the account.</summary>
            [Google.Apis.Util.RequestParameterAttribute("merchantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual long MerchantId { get; private set; }

            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.ShoppingContent.v2_1.Data.RequestReviewShoppingAdsRequest Body { get; set; }

            /// <summary>Returns the body of the request.</summary>
            protected override object GetBody() => Body;

            /// <summary>Gets the method name.</summary>
            public override string MethodName => "requestreview";

            /// <summary>Gets the HTTP method.</summary>
            public override string HttpMethod => "POST";

            /// <summary>Gets the REST path.</summary>
            public override string RestPath => "{merchantId}/shoppingadsprogram/requestreview";

            /// <summary>Initializes Requestreview parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();
                RequestParameters.Add("merchantId", new Google.Apis.Discovery.Parameter
                {
                    Name = "merchantId",
                    IsRequired = true,
                    ParameterType = "path",
                    DefaultValue = null,
                    Pattern = null,
                });
            }
        }
    }
}
namespace Google.Apis.ShoppingContent.v2_1.Data
{
    /// <summary>
    /// Account data. After the creation of a new account it may take a few minutes before it's fully operational. The
    /// methods delete, insert, and update require the admin role.
    /// </summary>
    public class Account : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Output only. How the account is managed. Acceptable values are: - "`manual`" - "`automatic`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountManagement")]
        public virtual string AccountManagement { get; set; }

        /// <summary>
        /// Linked Ads accounts that are active or pending approval. To create a new link request, add a new link with
        /// status `active` to the list. It will remain in a `pending` state until approved or rejected either in the
        /// Ads interface or through the Google Ads API. To delete an active link, or to cancel a link request, remove
        /// it from the list.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("adsLinks")]
        public virtual System.Collections.Generic.IList<AccountAdsLink> AdsLinks { get; set; }

        /// <summary>Indicates whether the merchant sells adult content.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("adultContent")]
        public virtual System.Nullable<bool> AdultContent { get; set; }

        /// <summary>
        /// The automatic improvements of the account can be used to automatically update items, improve images and
        /// shipping. Each section inside AutomaticImprovements is updated separately.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("automaticImprovements")]
        public virtual AccountAutomaticImprovements AutomaticImprovements { get; set; }

        /// <summary>Automatically created label IDs that are assigned to the account by CSS Center.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("automaticLabelIds")]
        public virtual System.Collections.Generic.IList<System.Nullable<ulong>> AutomaticLabelIds { get; set; }

        /// <summary>
        /// The business identity attributes can be used to self-declare attributes that let customers know more about
        /// your business.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("businessIdentity")]
        public virtual AccountBusinessIdentity BusinessIdentity { get; set; }

        /// <summary>The business information of the account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("businessInformation")]
        public virtual AccountBusinessInformation BusinessInformation { get; set; }

        /// <summary>Settings for conversion tracking.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("conversionSettings")]
        public virtual AccountConversionSettings ConversionSettings { get; set; }

        /// <summary>ID of CSS the account belongs to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cssId")]
        public virtual System.Nullable<ulong> CssId { get; set; }

        /// <summary>
        /// The Business Profile which is linked or in the process of being linked with the Merchant Center account.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("googleMyBusinessLink")]
        public virtual AccountGoogleMyBusinessLink GoogleMyBusinessLink { get; set; }

        /// <summary>Required. 64-bit Merchant Center account ID.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual System.Nullable<ulong> Id { get; set; }

        /// <summary>Identifies what kind of resource this is. Value: the fixed string "`content#account`".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>Manually created label IDs that are assigned to the account by CSS.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("labelIds")]
        public virtual System.Collections.Generic.IList<System.Nullable<ulong>> LabelIds { get; set; }

        /// <summary>Required. Display name for the account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        /// <summary>Client-specific, locally-unique, internal ID for the child account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sellerId")]
        public virtual string SellerId { get; set; }

        /// <summary>
        /// Users with access to the account. Every account (except for subaccounts) must have at least one admin user.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("users")]
        public virtual System.Collections.Generic.IList<AccountUser> Users { get; set; }

        /// <summary>The merchant's website.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("websiteUrl")]
        public virtual string WebsiteUrl { get; set; }

        /// <summary>
        /// Linked YouTube channels that are active or pending approval. To create a new link request, add a new link
        /// with status `active` to the list. It will remain in a `pending` state until approved or rejected in the YT
        /// Creator Studio interface. To delete an active link, or to cancel a link request, remove it from the list.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("youtubeChannelLinks")]
        public virtual System.Collections.Generic.IList<AccountYouTubeChannelLink> YoutubeChannelLinks { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountAddress : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// CLDR country code (for example, "US"). All MCA sub-accounts inherit the country of their parent MCA by
        /// default, however the country can be updated for individual sub-accounts.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; }

        /// <summary>
        /// City, town or commune. May also include dependent localities or sublocalities (for example, neighborhoods or
        /// suburbs).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("locality")]
        public virtual string Locality { get; set; }

        /// <summary>Postal code or ZIP (for example, "94043").</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("postalCode")]
        public virtual string PostalCode { get; set; }

        /// <summary>
        /// Top-level administrative subdivision of the country. For example, a state like California ("CA") or a
        /// province like Quebec ("QC").
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("region")]
        public virtual string Region { get; set; }

        /// <summary>Street-level part of the address. Use `\n` to add a second line.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("streetAddress")]
        public virtual string StreetAddress { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountAdsLink : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Customer ID of the Ads account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("adsId")]
        public virtual System.Nullable<ulong> AdsId { get; set; }

        /// <summary>
        /// Status of the link between this Merchant Center account and the Ads account. Upon retrieval, it represents
        /// the actual status of the link and can be either `active` if it was approved in Google Ads or `pending` if
        /// it's pending approval. Upon insertion, it represents the *intended* status of the link. Re-uploading a link
        /// with status `active` when it's still pending or with status `pending` when it's already active will have no
        /// effect: the status will remain unchanged. Re-uploading a link with deprecated status `inactive` is
        /// equivalent to not submitting the link at all and will delete the link if it was active or cancel the link
        /// request if it was pending. Acceptable values are: - "`active`" - "`pending`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// The automatic improvements of the account can be used to automatically update items, improve images and
    /// shipping.
    /// </summary>
    public class AccountAutomaticImprovements : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// This improvement will attempt to automatically correct submitted images if they don't meet the [image
        /// requirements](https://support.google.com/merchants/answer/6324350), for example, removing overlays. If
        /// successful, the image will be replaced and approved. This improvement is only applied to images of
        /// disapproved offers. For more information see: [Automatic image
        /// improvements](https://support.google.com/merchants/answer/9242973) This field is only updated (cleared) if
        /// provided.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("imageImprovements")]
        public virtual AccountImageImprovements ImageImprovements { get; set; }

        /// <summary>
        /// Turning on [item updates](https://support.google.com/merchants/answer/3246284) allows Google to
        /// automatically update items for you. When item updates are on, Google uses the structured data markup on the
        /// website and advanced data extractors to update the price and availability of the items. When the item
        /// updates are off, items with mismatched data aren't shown. This field is only updated (cleared) if provided.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemUpdates")]
        public virtual AccountItemUpdates ItemUpdates { get; set; }

        /// <summary>
        /// Not available for MCAs [accounts](https://support.google.com/merchants/answer/188487). By turning on
        /// [automatic shipping improvements](https://support.google.com/merchants/answer/10027038), you are allowing
        /// Google to improve the accuracy of your delivery times shown to shoppers using Google. More accurate delivery
        /// times, especially when faster, typically lead to better conversion rates. Google will improve your estimated
        /// delivery times based on various factors: - Delivery address of an order - Current handling time and shipping
        /// time settings - Estimated weekdays or business days - Parcel tracking data This field is only updated
        /// (cleared) if provided.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippingImprovements")]
        public virtual AccountShippingImprovements ShippingImprovements { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// The [business identity attributes](https://support.google.com/merchants/answer/10342414) can be used to
    /// self-declare attributes that let customers know more about your business.
    /// </summary>
    public class AccountBusinessIdentity : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Specifies whether the business identifies itself as being black-owned. This optional field is only available
        /// for merchants with a business country set to "US". This field is not allowed for marketplaces or marketplace
        /// sellers.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("blackOwned")]
        public virtual AccountIdentityType BlackOwned { get; set; }

        /// <summary>
        /// Required. By setting this field, your business may be included in promotions for all the selected
        /// attributes. If you clear this option, it won't affect your identification with any of the attributes. For
        /// this field to be set, the merchant must self identify with at least one of the `AccountIdentityType`. If
        /// none are included, the request will be considered invalid.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("includeForPromotions")]
        public virtual System.Nullable<bool> IncludeForPromotions { get; set; }

        /// <summary>
        /// Specifies whether the business identifies itself as being latino-owned. This optional field is only
        /// available for merchants with a business country set to "US". This field is not allowed for marketplaces or
        /// marketplace sellers.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("latinoOwned")]
        public virtual AccountIdentityType LatinoOwned { get; set; }

        /// <summary>
        /// Specifies whether the business identifies itself as a small business. This optional field is only available
        /// for merchants with a business country set to "US". It is also not allowed for marketplaces, but it is
        /// allowed to marketplace sellers.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("smallBusiness")]
        public virtual AccountIdentityType SmallBusiness { get; set; }

        /// <summary>
        /// Specifies whether the business identifies itself as being veteran-owned. This optional field is only
        /// available for merchants with a business country set to "US". This field is not allowed for marketplaces or
        /// marketplace sellers.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("veteranOwned")]
        public virtual AccountIdentityType VeteranOwned { get; set; }

        /// <summary>
        /// Specifies whether the business identifies itself as being women-owned. This optional field is only available
        /// for merchants with a business country set to "US". This field is not allowed for marketplaces or marketplace
        /// sellers.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("womenOwned")]
        public virtual AccountIdentityType WomenOwned { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountBusinessInformation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The address of the business. Use `\n` to add a second address line.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("address")]
        public virtual AccountAddress Address { get; set; }

        /// <summary>The customer service information of the business.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customerService")]
        public virtual AccountCustomerService CustomerService { get; set; }

        /// <summary>
        /// The 10-digit [Korean business registration number](https://support.google.com/merchants/answer/9037766)
        /// separated with dashes in the format: XXX-XX-XXXXX. This field will only be updated if explicitly set.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("koreanBusinessRegistrationNumber")]
        public virtual string KoreanBusinessRegistrationNumber { get; set; }

        /// <summary>
        /// The phone number of the business in [E.164](https://en.wikipedia.org/wiki/E.164) format. This can only be
        /// updated if a verified phone number is not already set. To replace a verified phone number use the
        /// `Accounts.requestphoneverification` and `Accounts.verifyphonenumber`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("phoneNumber")]
        public virtual string PhoneNumber { get; set; }

        /// <summary>
        /// Verification status of the phone number of the business. This status is read only and can be updated only by
        /// successful phone verification. Acceptable values are: - "`verified`" - "`unverified`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("phoneVerificationStatus")]
        public virtual string PhoneVerificationStatus { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Settings for conversion tracking.</summary>
    public class AccountConversionSettings : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// When enabled, free listing URLs have a parameter to enable conversion tracking for products owned by the
        /// current merchant account. See [auto-tagging](https://support.google.com/merchants/answer/11127659).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("freeListingsAutoTaggingEnabled")]
        public virtual System.Nullable<bool> FreeListingsAutoTaggingEnabled { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Credentials allowing Google to call a partner's API on behalf of a merchant.</summary>
    public class AccountCredentials : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>An OAuth access token.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accessToken")]
        public virtual string AccessToken { get; set; }

        /// <summary>The amount of time, in seconds, after which the access token is no longer valid.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("expiresIn")]
        public virtual System.Nullable<long> ExpiresIn { get; set; }

        /// <summary>Indicates to Google how Google should use these OAuth tokens.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("purpose")]
        public virtual string Purpose { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountCustomerService : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Customer service email.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("email")]
        public virtual string Email { get; set; }

        /// <summary>Customer service phone number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("phoneNumber")]
        public virtual string PhoneNumber { get; set; }

        /// <summary>Customer service URL.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("url")]
        public virtual string Url { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountGoogleMyBusinessLink : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The ID of the Business Profile. If this is provided, then `gmbEmail` is ignored. The value of this field
        /// should match the `accountId` used by the Business Profile API.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gmbAccountId")]
        public virtual string GmbAccountId { get; set; }

        /// <summary>
        /// The Business Profile email address of a specific account within a Business Profile. A sample account within
        /// a Business Profile could be a business account with set of locations, managed under the Business Profile.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gmbEmail")]
        public virtual string GmbEmail { get; set; }

        /// <summary>
        /// Status of the link between this Merchant Center account and the Business Profile. Acceptable values are: -
        /// "`active`" - "`pending`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountIdentifier : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The aggregator ID, set for aggregators and subaccounts (in that case, it represents the aggregator of the
        /// subaccount).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("aggregatorId")]
        public virtual System.Nullable<ulong> AggregatorId { get; set; }

        /// <summary>The merchant account ID, set for individual accounts and subaccounts.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("merchantId")]
        public virtual System.Nullable<ulong> MerchantId { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The account identity type used to specify attributes.</summary>
    public class AccountIdentityType : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Optional. Indicates that the business identifies itself with a given identity type. Setting this field does
        /// not automatically mean eligibility for promotions.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("selfIdentified")]
        public virtual System.Nullable<bool> SelfIdentified { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// This improvement will attempt to automatically correct submitted images if they don't meet the [image
    /// requirements](https://support.google.com/merchants/answer/6324350), for example, removing overlays. If
    /// successful, the image will be replaced and approved. This improvement is only applied to images of disapproved
    /// offers. For more information see: [Automatic image
    /// improvements](https://support.google.com/merchants/answer/9242973)
    /// </summary>
    public class AccountImageImprovements : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Determines how the images should be automatically updated. If this field is not present, then the settings
        /// will be deleted. If there are no settings for subaccount, they are inherited from aggregator.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountImageImprovementsSettings")]
        public virtual AccountImageImprovementsSettings AccountImageImprovementsSettings { get; set; }

        /// <summary>
        /// Output only. The effective value of allow_automatic_image_improvements. If
        /// account_image_improvements_settings is present, then this value is the same. Otherwise, it represents the
        /// inherited value of the parent account. Read-only.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("effectiveAllowAutomaticImageImprovements")]
        public virtual System.Nullable<bool> EffectiveAllowAutomaticImageImprovements { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Settings for the Automatic Image Improvements.</summary>
    public class AccountImageImprovementsSettings : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Enables automatic image improvements.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("allowAutomaticImageImprovements")]
        public virtual System.Nullable<bool> AllowAutomaticImageImprovements { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>An issue affecting specific merchant.</summary>
    public class AccountIssue : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// A list of actionable steps that can be executed to solve the issue. An example is requesting a re-review or
        /// providing arguments when merchant disagrees with the issue. Actions that are supported in (your) third-party
        /// application can be rendered as buttons and should be available to merchant when they expand the issue.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("actions")]
        public virtual System.Collections.Generic.IList<Action> Actions { get; set; }

        /// <summary>
        /// Clarifies the severity of the issue. The summarizing message, if present, should be shown right under the
        /// title for each issue. It helps merchants to quickly understand the impact of the issue. The detailed
        /// breakdown helps the merchant to fully understand the impact of the issue. It can be rendered as dialog that
        /// opens when the merchant mouse over the summarized impact statement. Issues with different severity can be
        /// styled differently. They may use a different color or icon to signal the difference between `ERROR`,
        /// `WARNING` and `INFO`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("impact")]
        public virtual AccountIssueImpact Impact { get; set; }

        /// <summary>
        /// Details of the issue as a pre-rendered HTML. HTML elements contain CSS classes that can be used to customize
        /// the style of the content. Always sanitize the HTML before embedding it directly to your application. The
        /// sanitizer needs to allow basic HTML tags, such as: `div`, `span`, `p`, `a`, `ul`, `li`, `table`, `tr`, `td`.
        /// For example, you can use [DOMPurify](https://www.npmjs.com/package/dompurify). CSS classes: * `issue-detail`
        /// - top level container for the detail of the issue * `callout-banners` - section of the `issue-detail` with
        /// callout banners * `callout-banner` - single callout banner, inside `callout-banners` * `callout-banner-info`
        /// - callout with important information (default) * `callout-banner-warning` - callout with a warning *
        /// `callout-banner-error` - callout informing about an error (most severe) * `issue-content` - section of the
        /// `issue-detail`, contains multiple `content-element` * `content-element` - content element such as a list,
        /// link or paragraph, inside `issue-content` * `root-causes` - unordered list with items describing root causes
        /// of the issue, inside `issue-content` * `root-causes-intro` - intro text before the `root-causes` list,
        /// inside `issue-content` * `segment` - section of the text, `span` inside paragraph * `segment-attribute` -
        /// section of the text that represents a product attribute, for example 'image\_link' * `segment-literal` -
        /// section of the text that contains a special value, for example '0-1000 kg' * `segment-bold` - section of the
        /// text that should be rendered as bold * `segment-italic` - section of the text that should be rendered as
        /// italic * `tooltip` - used on paragraphs that should be rendered with a tooltip. A section of the text in
        /// such a paragraph will have a class `tooltip-text` and is intended to be shown in a mouse over dialog. If the
        /// style is not used, the `tooltip-text` section would be shown on a new line, after the main part of the text.
        /// * `tooltip-text` - marks a section of the text within a `tooltip`, that is intended to be shown in a mouse
        /// over dialog. * `tooltip-icon` - marks a section of the text within a `tooltip`, that can be replaced with a
        /// tooltip icon, for example '?' or 'i'. By default, this section contains a `br` tag, that is separating the
        /// main text and the tooltip text when the style is not used. * `tooltip-style-question` - the tooltip shows
        /// helpful information, can use the '?' as an icon. * `tooltip-style-info` - the tooltip adds additional
        /// information fitting to the context, can use the 'i' as an icon. * `content-moderation` - marks the paragraph
        /// that explains how the issue was identified. * `new-element` - Present for new elements added to the
        /// pre-rendered content in the future. To make sure that a new content element does not break your style, you
        /// can hide everything with this class.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("prerenderedContent")]
        public virtual string PrerenderedContent { get; set; }

        /// <summary>
        /// Pre-rendered HTML that contains a link to the external location where the ODS can be requested and
        /// instructions for how to request it. HTML elements contain CSS classes that can be used to customize the
        /// style of this snippet. Always sanitize the HTML before embedding it directly to your application. The
        /// sanitizer needs to allow basic HTML tags, such as: `div`, `span`, `p`, `a`, `ul`, `li`, `table`, `tr`, `td`.
        /// For example, you can use [DOMPurify](https://www.npmjs.com/package/dompurify). CSS classes: * `ods-section`*
        /// - wrapper around the out-of-court dispute resolution section * `ods-description`* - intro text for the
        /// out-of-court dispute resolution. It may contain multiple segments and a link. * `ods-param`* - wrapper
        /// around the header-value pair for parameters that merchant may need to provide during the ODS process. *
        /// `ods-routing-id`* - ods param for the Routing ID. * `ods-reference-id`* - ods param for the Routing ID. *
        /// `ods-param-header`* - header for the ODS parameter * `ods-param-value`* - value of the ODS parameter. This
        /// value should be rendered in a way that it is easy for merchants to identify and copy. * `segment` - section
        /// of the text, `span` inside paragraph * `segment-attribute` - section of the text that represents a product
        /// attribute, for example 'image\_link' * `segment-literal` - section of the text that contains a special
        /// value, for example '0-1000 kg' * `segment-bold` - section of the text that should be rendered as bold *
        /// `segment-italic` - section of the text that should be rendered as italic * `tooltip` - used on paragraphs
        /// that should be rendered with a tooltip. A section of the text in such a paragraph will have a class
        /// `tooltip-text` and is intended to be shown in a mouse over dialog. If the style is not used, the
        /// `tooltip-text` section would be shown on a new line, after the main part of the text. * `tooltip-text` -
        /// marks a section of the text within a `tooltip`, that is intended to be shown in a mouse over dialog. *
        /// `tooltip-icon` - marks a section of the text within a `tooltip`, that can be replaced with a tooltip icon,
        /// for example '?' or 'i'. By default, this section contains a `br` tag, that is separating the main text and
        /// the tooltip text when the style is not used. * `tooltip-style-question` - the tooltip shows helpful
        /// information, can use the '?' as an icon. * `tooltip-style-info` - the tooltip adds additional information
        /// fitting to the context, can use the 'i' as an icon.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("prerenderedOutOfCourtDisputeSettlement")]
        public virtual string PrerenderedOutOfCourtDisputeSettlement { get; set; }

        /// <summary>Title of the issue.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Overall impact of the issue.</summary>
    public class AccountIssueImpact : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Detailed impact breakdown. Explains the types of restriction the issue has in different shopping
        /// destinations and territory. If present, it should be rendered to the merchant. Can be shown as a mouse over
        /// dropdown or a dialog. Each breakdown item represents a group of regions with the same impact details.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("breakdowns")]
        public virtual System.Collections.Generic.IList<Breakdown> Breakdowns { get; set; }

        /// <summary>
        /// Optional. Message summarizing the overall impact of the issue. If present, it should be rendered to the
        /// merchant. For example: "Disapproves 90k offers in 25 countries"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("message")]
        public virtual string Message { get; set; }

        /// <summary>The severity of the issue.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("severity")]
        public virtual string Severity { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Turning on [item updates](https://support.google.com/merchants/answer/3246284) allows Google to automatically
    /// update items for you. When item updates are on, Google uses the structured data markup on the website and
    /// advanced data extractors to update the price and availability of the items. When the item updates are off, items
    /// with mismatched data aren't shown.
    /// </summary>
    public class AccountItemUpdates : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Determines which attributes of the items should be automatically updated. If this field is not present, then
        /// the settings will be deleted. If there are no settings for subaccount, they are inherited from aggregator.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountItemUpdatesSettings")]
        public virtual AccountItemUpdatesSettings AccountItemUpdatesSettings { get; set; }

        /// <summary>
        /// Output only. The effective value of allow_availability_updates. If account_item_updates_settings is present,
        /// then this value is the same. Otherwise, it represents the inherited value of the parent account. Read-only.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("effectiveAllowAvailabilityUpdates")]
        public virtual System.Nullable<bool> EffectiveAllowAvailabilityUpdates { get; set; }

        /// <summary>
        /// Output only. The effective value of allow_condition_updates. If account_item_updates_settings is present,
        /// then this value is the same. Otherwise, it represents the inherited value of the parent account. Read-only.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("effectiveAllowConditionUpdates")]
        public virtual System.Nullable<bool> EffectiveAllowConditionUpdates { get; set; }

        /// <summary>
        /// Output only. The effective value of allow_price_updates. If account_item_updates_settings is present, then
        /// this value is the same. Otherwise, it represents the inherited value of the parent account. Read-only.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("effectiveAllowPriceUpdates")]
        public virtual System.Nullable<bool> EffectiveAllowPriceUpdates { get; set; }

        /// <summary>
        /// Output only. The effective value of allow_strict_availability_updates. If account_item_updates_settings is
        /// present, then this value is the same. Otherwise, it represents the inherited value of the parent account.
        /// Read-only.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("effectiveAllowStrictAvailabilityUpdates")]
        public virtual System.Nullable<bool> EffectiveAllowStrictAvailabilityUpdates { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Settings for the Automatic Item Updates.</summary>
    public class AccountItemUpdatesSettings : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// If availability updates are enabled, any previous availability values get overwritten if Google finds an
        /// out-of-stock annotation on the offer's page. If additionally `allow_availability_updates` field is set to
        /// true, values get overwritten if Google finds an in-stock annotation on the offer’s page.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("allowAvailabilityUpdates")]
        public virtual System.Nullable<bool> AllowAvailabilityUpdates { get; set; }

        /// <summary>
        /// If condition updates are enabled, Google always updates item condition with the condition detected from the
        /// details of your product.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("allowConditionUpdates")]
        public virtual System.Nullable<bool> AllowConditionUpdates { get; set; }

        /// <summary>
        /// If price updates are enabled, Google always updates the active price with the crawled information.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("allowPriceUpdates")]
        public virtual System.Nullable<bool> AllowPriceUpdates { get; set; }

        /// <summary>
        /// If allow_availability_updates is enabled, items are automatically updated in all your Shopping target
        /// countries. By default, availability updates will only be applied to items that are 'out of stock' on your
        /// website but 'in stock' on Shopping. Set this to true to also update items that are 'in stock' on your
        /// website, but 'out of stock' on Google Shopping. In order for this field to have an effect, you must also
        /// allow availability updates.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("allowStrictAvailabilityUpdates")]
        public virtual System.Nullable<bool> AllowStrictAvailabilityUpdates { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Label assigned by CSS domain or CSS group to one of its sub-accounts.</summary>
    public class AccountLabel : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Immutable. The ID of account this label belongs to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountId")]
        public virtual System.Nullable<long> AccountId { get; set; }

        /// <summary>The description of this label.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; }

        /// <summary>Output only. The ID of the label.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("labelId")]
        public virtual System.Nullable<long> LabelId { get; set; }

        /// <summary>Output only. The type of this label.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("labelType")]
        public virtual string LabelType { get; set; }

        /// <summary>The display name of this label.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    ///  The return carrier information. This service is designed for merchants enrolled in the Buy on Google program.
    /// </summary>
    public class AccountReturnCarrier : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Output only. Immutable. The Google-provided unique carrier ID, used to update the resource.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("carrierAccountId")]
        public virtual System.Nullable<long> CarrierAccountId { get; set; }

        /// <summary>Name of the carrier account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("carrierAccountName")]
        public virtual string CarrierAccountName { get; set; }

        /// <summary>Number of the carrier account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("carrierAccountNumber")]
        public virtual string CarrierAccountNumber { get; set; }

        /// <summary>The carrier code enum. Accepts the values FEDEX or UPS.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("carrierCode")]
        public virtual string CarrierCode { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Not available for MCAs [accounts](https://support.google.com/merchants/answer/188487). By turning on [automatic
    /// shipping improvements](https://support.google.com/merchants/answer/10027038), you are allowing Google to improve
    /// the accuracy of your delivery times shown to shoppers using Google. More accurate delivery times, especially
    /// when faster, typically lead to better conversion rates. Google will improve your estimated delivery times based
    /// on various factors: * Delivery address of an order * Current handling time and shipping time settings *
    /// Estimated weekdays or business days * Parcel tracking data
    /// </summary>
    public class AccountShippingImprovements : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Enables automatic shipping improvements.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("allowShippingImprovements")]
        public virtual System.Nullable<bool> AllowShippingImprovements { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// The status of an account, that is, information about its products, which is computed offline and not returned
    /// immediately at insertion time.
    /// </summary>
    public class AccountStatus : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the account for which the status is reported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountId")]
        public virtual string AccountId { get; set; }

        /// <summary>A list of account level issues.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountLevelIssues")]
        public virtual System.Collections.Generic.IList<AccountStatusAccountLevelIssue> AccountLevelIssues { get; set; }

        /// <summary>How the account is managed. Acceptable values are: - "`manual`" - "`automatic`" </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountManagement")]
        public virtual string AccountManagement { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#accountStatus`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>
        /// List of product-related data by channel, destination, and country. Data in this field may be delayed by up
        /// to 30 minutes.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("products")]
        public virtual System.Collections.Generic.IList<AccountStatusProducts> Products { get; set; }

        /// <summary>Whether the account's website is claimed or not.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("websiteClaimed")]
        public virtual System.Nullable<bool> WebsiteClaimed { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountStatusAccountLevelIssue : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Country for which this issue is reported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; }

        /// <summary>
        /// The destination the issue applies to. If this field is empty then the issue applies to all available
        /// destinations.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("destination")]
        public virtual string Destination { get; set; }

        /// <summary>Additional details about the issue.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("detail")]
        public virtual string Detail { get; set; }

        /// <summary>The URL of a web page to help resolving this issue.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("documentation")]
        public virtual string Documentation { get; set; }

        /// <summary>Issue identifier.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; }

        /// <summary>
        /// Severity of the issue. Acceptable values are: - "`critical`" - "`error`" - "`suggestion`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("severity")]
        public virtual string Severity { get; set; }

        /// <summary>Short description of the issue.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountStatusItemLevelIssue : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The attribute's name, if the issue is caused by a single attribute.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("attributeName")]
        public virtual string AttributeName { get; set; }

        /// <summary>The error code of the issue.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("code")]
        public virtual string Code { get; set; }

        /// <summary>A short issue description in English.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; }

        /// <summary>A detailed issue description in English.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("detail")]
        public virtual string Detail { get; set; }

        /// <summary>The URL of a web page to help with resolving this issue.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("documentation")]
        public virtual string Documentation { get; set; }

        /// <summary>Number of items with this issue.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("numItems")]
        public virtual System.Nullable<long> NumItems { get; set; }

        /// <summary>Whether the issue can be resolved by the merchant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("resolution")]
        public virtual string Resolution { get; set; }

        /// <summary>How this issue affects serving of the offer.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("servability")]
        public virtual string Servability { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountStatusProducts : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The channel the data applies to. Acceptable values are: - "`local`" - "`online`" </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("channel")]
        public virtual string Channel { get; set; }

        /// <summary>The country the data applies to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; }

        /// <summary>The destination the data applies to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("destination")]
        public virtual string Destination { get; set; }

        /// <summary>List of item-level issues.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemLevelIssues")]
        public virtual System.Collections.Generic.IList<AccountStatusItemLevelIssue> ItemLevelIssues { get; set; }

        /// <summary>Aggregated product statistics.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("statistics")]
        public virtual AccountStatusStatistics Statistics { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountStatusStatistics : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Number of active offers.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("active")]
        public virtual System.Nullable<long> Active { get; set; }

        /// <summary>Number of disapproved offers.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("disapproved")]
        public virtual System.Nullable<long> Disapproved { get; set; }

        /// <summary>Number of expiring offers.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("expiring")]
        public virtual System.Nullable<long> Expiring { get; set; }

        /// <summary>Number of pending offers.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pending")]
        public virtual System.Nullable<long> Pending { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The tax settings of a merchant account. All methods require the admin role.</summary>
    public class AccountTax : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The ID of the account to which these account tax settings belong.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountId")]
        public virtual System.Nullable<ulong> AccountId { get; set; }

        /// <summary>Identifies what kind of resource this is. Value: the fixed string "`content#accountTax`".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>
        /// Tax rules. Updating the tax rules will enable "US" taxes (not reversible). Defining no rules is equivalent
        /// to not charging tax at all.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rules")]
        public virtual System.Collections.Generic.IList<AccountTaxTaxRule> Rules { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Tax calculation rule to apply in a state or province (US only).</summary>
    public class AccountTaxTaxRule : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Country code in which tax is applicable.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; }

        /// <summary>
        /// Required. State (or province) is which the tax is applicable, described by its location ID (also called
        /// criteria ID).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("locationId")]
        public virtual System.Nullable<ulong> LocationId { get; set; }

        /// <summary>
        /// Explicit tax rate in percent, represented as a floating point number without the percentage character. Must
        /// not be negative.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ratePercent")]
        public virtual string RatePercent { get; set; }

        /// <summary>If true, shipping charges are also taxed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippingTaxed")]
        public virtual System.Nullable<bool> ShippingTaxed { get; set; }

        /// <summary>Whether the tax rate is taken from a global tax table or specified explicitly.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("useGlobalRate")]
        public virtual System.Nullable<bool> UseGlobalRate { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountUser : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Whether user is an admin.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("admin")]
        public virtual System.Nullable<bool> Admin { get; set; }

        /// <summary>User's email address.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("emailAddress")]
        public virtual string EmailAddress { get; set; }

        /// <summary>This role is deprecated and can no longer be assigned. Any value set will be ignored.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("orderManager")]
        public virtual System.Nullable<bool> OrderManager { get; set; }

        /// <summary>This role is deprecated and can no longer be assigned. Any value set will be ignored.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("paymentsAnalyst")]
        public virtual System.Nullable<bool> PaymentsAnalyst { get; set; }

        /// <summary>This role is deprecated and can no longer be assigned. Any value set will be ignored.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("paymentsManager")]
        public virtual System.Nullable<bool> PaymentsManager { get; set; }

        /// <summary>Optional. Whether user has standard read-only access.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("readOnly")]
        public virtual System.Nullable<bool> ReadOnly__ { get; set; }

        /// <summary>
        /// Whether user is a reporting manager. This role is equivalent to the Performance and insights role in
        /// Merchant Center.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reportingManager")]
        public virtual System.Nullable<bool> ReportingManager { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountYouTubeChannelLink : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Channel ID.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("channelId")]
        public virtual string ChannelId { get; set; }

        /// <summary>
        /// Status of the link between this Merchant Center account and the YouTube channel. Upon retrieval, it
        /// represents the actual status of the link and can be either `active` if it was approved in YT Creator Studio
        /// or `pending` if it's pending approval. Upon insertion, it represents the *intended* status of the link.
        /// Re-uploading a link with status `active` when it's still pending or with status `pending` when it's already
        /// active will have no effect: the status will remain unchanged. Re-uploading a link with deprecated status
        /// `inactive` is equivalent to not submitting the link at all and will delete the link if it was active or
        /// cancel the link request if it was pending.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountsAuthInfoResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The account identifiers corresponding to the authenticated user. - For an individual account: only the
        /// merchant ID is defined - For an aggregator: only the aggregator ID is defined - For a subaccount of an MCA:
        /// both the merchant ID and the aggregator ID are defined.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountIdentifiers")]
        public virtual System.Collections.Generic.IList<AccountIdentifier> AccountIdentifiers { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#accountsAuthInfoResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountsClaimWebsiteResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#accountsClaimWebsiteResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountsCustomBatchRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The request entries to be processed in the batch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<AccountsCustomBatchRequestEntry> Entries { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A batch entry encoding a single non-batch accounts request.</summary>
    public class AccountsCustomBatchRequestEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The account to create or update. Only defined if the method is `insert` or `update`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("account")]
        public virtual Account Account { get; set; }

        /// <summary>The ID of the targeted account. Only defined if the method is not `insert`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountId")]
        public virtual System.Nullable<ulong> AccountId { get; set; }

        /// <summary>An entry ID, unique within the batch request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>
        /// Whether the account should be deleted if the account has offers. Only applicable if the method is `delete`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("force")]
        public virtual System.Nullable<bool> Force { get; set; }

        /// <summary>Label IDs for the 'updatelabels' request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("labelIds")]
        public virtual System.Collections.Generic.IList<System.Nullable<ulong>> LabelIds { get; set; }

        /// <summary>Details about the `link` request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("linkRequest")]
        public virtual AccountsCustomBatchRequestEntryLinkRequest LinkRequest { get; set; }

        /// <summary>The ID of the managing account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("merchantId")]
        public virtual System.Nullable<ulong> MerchantId { get; set; }

        /// <summary>
        /// The method of the batch entry. Acceptable values are: - "`claimWebsite`" - "`delete`" - "`get`" - "`insert`"
        /// - "`link`" - "`update`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("method")]
        public virtual string Method { get; set; }

        /// <summary>
        /// Only applicable if the method is `claimwebsite`. Indicates whether or not to take the claim from another
        /// account in case there is a conflict.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("overwrite")]
        public virtual System.Nullable<bool> Overwrite { get; set; }

        /// <summary>Controls which fields are visible. Only applicable if the method is 'get'.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("view")]
        public virtual string View { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountsCustomBatchRequestEntryLinkRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Action to perform for this link. The `"request"` action is only available to select merchants. Acceptable
        /// values are: - "`approve`" - "`remove`" - "`request`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("action")]
        public virtual string Action { get; set; }

        /// <summary>
        /// Type of the link between the two accounts. Acceptable values are: - "`channelPartner`" -
        /// "`eCommercePlatform`" - "`paymentServiceProvider`" - "`localProductManager`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("linkType")]
        public virtual string LinkType { get; set; }

        /// <summary>The ID of the linked account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("linkedAccountId")]
        public virtual string LinkedAccountId { get; set; }

        /// <summary>
        /// Provided services. Acceptable values are: - "`shoppingAdsProductManagement`" -
        /// "`shoppingActionsProductManagement`" - "`shoppingActionsOrderManagement`" - "`paymentProcessing`" -
        /// "`localProductManagement`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("services")]
        public virtual System.Collections.Generic.IList<string> Services { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountsCustomBatchResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The result of the execution of the batch requests.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<AccountsCustomBatchResponseEntry> Entries { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#accountsCustomBatchResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A batch entry encoding a single non-batch accounts response.</summary>
    public class AccountsCustomBatchResponseEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The retrieved, created, or updated account. Not defined if the method was `delete`, `claimwebsite` or
        /// `link`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("account")]
        public virtual Account Account { get; set; }

        /// <summary>The ID of the request entry this entry responds to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>
        /// A list of errors for failed custombatch entries. *Note:* Schema errors fail the whole request.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("errors")]
        public virtual Errors Errors { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#accountsCustomBatchResponseEntry`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountsLinkRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Action to perform for this link. The `"request"` action is only available to select merchants. Acceptable
        /// values are: - "`approve`" - "`remove`" - "`request`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("action")]
        public virtual string Action { get; set; }

        /// <summary>Additional information required for `eCommercePlatform` link type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("eCommercePlatformLinkInfo")]
        public virtual ECommercePlatformLinkInfo ECommercePlatformLinkInfo { get; set; }

        /// <summary>
        /// Type of the link between the two accounts. Acceptable values are: - "`channelPartner`" -
        /// "`eCommercePlatform`" - "`paymentServiceProvider`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("linkType")]
        public virtual string LinkType { get; set; }

        /// <summary>The ID of the linked account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("linkedAccountId")]
        public virtual string LinkedAccountId { get; set; }

        /// <summary>Additional information required for `paymentServiceProvider` link type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("paymentServiceProviderLinkInfo")]
        public virtual PaymentServiceProviderLinkInfo PaymentServiceProviderLinkInfo { get; set; }

        /// <summary>
        ///  Acceptable values are: - "`shoppingAdsProductManagement`" - "`shoppingActionsProductManagement`" -
        /// "`shoppingActionsOrderManagement`" - "`paymentProcessing`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("services")]
        public virtual System.Collections.Generic.IList<string> Services { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountsLinkResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#accountsLinkResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountsListLinksResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#accountsListLinksResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The list of available links.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("links")]
        public virtual System.Collections.Generic.IList<LinkedAccount> Links { get; set; }

        /// <summary>The token for the retrieval of the next page of links.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountsListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#accountsListResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The token for the retrieval of the next page of accounts.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        [Newtonsoft.Json.JsonPropertyAttribute("resources")]
        public virtual System.Collections.Generic.IList<Account> Resources { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountsUpdateLabelsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The IDs of labels that should be assigned to the account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("labelIds")]
        public virtual System.Collections.Generic.IList<System.Nullable<ulong>> LabelIds { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountsUpdateLabelsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#accountsUpdateLabelsResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountstatusesCustomBatchRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The request entries to be processed in the batch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<AccountstatusesCustomBatchRequestEntry> Entries { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A batch entry encoding a single non-batch accountstatuses request.</summary>
    public class AccountstatusesCustomBatchRequestEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the (sub-)account whose status to get.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountId")]
        public virtual System.Nullable<ulong> AccountId { get; set; }

        /// <summary>An entry ID, unique within the batch request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>
        /// If set, only issues for the specified destinations are returned, otherwise only issues for the Shopping
        /// destination.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("destinations")]
        public virtual System.Collections.Generic.IList<string> Destinations { get; set; }

        /// <summary>The ID of the managing account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("merchantId")]
        public virtual System.Nullable<ulong> MerchantId { get; set; }

        /// <summary>The method of the batch entry. Acceptable values are: - "`get`" </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("method")]
        public virtual string Method { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountstatusesCustomBatchResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The result of the execution of the batch requests.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<AccountstatusesCustomBatchResponseEntry> Entries { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#accountstatusesCustomBatchResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A batch entry encoding a single non-batch accountstatuses response.</summary>
    public class AccountstatusesCustomBatchResponseEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The requested account status. Defined if and only if the request was successful.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountStatus")]
        public virtual AccountStatus AccountStatus { get; set; }

        /// <summary>The ID of the request entry this entry responds to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>
        /// A list of errors for failed custombatch entries. *Note:* Schema errors fail the whole request.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("errors")]
        public virtual Errors Errors { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccountstatusesListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#accountstatusesListResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The token for the retrieval of the next page of account statuses.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        [Newtonsoft.Json.JsonPropertyAttribute("resources")]
        public virtual System.Collections.Generic.IList<AccountStatus> Resources { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccounttaxCustomBatchRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The request entries to be processed in the batch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<AccounttaxCustomBatchRequestEntry> Entries { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A batch entry encoding a single non-batch accounttax request.</summary>
    public class AccounttaxCustomBatchRequestEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the account for which to get/update account tax settings.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountId")]
        public virtual System.Nullable<ulong> AccountId { get; set; }

        /// <summary>The account tax settings to update. Only defined if the method is `update`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountTax")]
        public virtual AccountTax AccountTax { get; set; }

        /// <summary>An entry ID, unique within the batch request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>The ID of the managing account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("merchantId")]
        public virtual System.Nullable<ulong> MerchantId { get; set; }

        /// <summary>The method of the batch entry. Acceptable values are: - "`get`" - "`update`" </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("method")]
        public virtual string Method { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccounttaxCustomBatchResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The result of the execution of the batch requests.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<AccounttaxCustomBatchResponseEntry> Entries { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#accounttaxCustomBatchResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A batch entry encoding a single non-batch accounttax response.</summary>
    public class AccounttaxCustomBatchResponseEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The retrieved or updated account tax settings.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountTax")]
        public virtual AccountTax AccountTax { get; set; }

        /// <summary>The ID of the request entry this entry responds to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>
        /// A list of errors for failed custombatch entries. *Note:* Schema errors fail the whole request.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("errors")]
        public virtual Errors Errors { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#accounttaxCustomBatchResponseEntry`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class AccounttaxListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#accounttaxListResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The token for the retrieval of the next page of account tax settings.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        [Newtonsoft.Json.JsonPropertyAttribute("resources")]
        public virtual System.Collections.Generic.IList<AccountTax> Resources { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>An actionable step that can be executed to solve the issue.</summary>
    public class Action : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Action implemented and performed in (your) third-party application. The application should point the
        /// merchant to the place, where they can access the corresponding functionality or provide instructions, if the
        /// specific functionality is not available.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("builtinSimpleAction")]
        public virtual BuiltInSimpleAction BuiltinSimpleAction { get; set; }

        /// <summary>
        /// Action implemented and performed in (your) third-party application. The application needs to show an
        /// additional content and input form to the merchant as specified for given action. They can trigger the action
        /// only when they provided all required inputs.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("builtinUserInputAction")]
        public virtual BuiltInUserInputAction BuiltinUserInputAction { get; set; }

        /// <summary>Label of the action button.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("buttonLabel")]
        public virtual string ButtonLabel { get; set; }

        /// <summary>
        /// Action that is implemented and performed outside of (your) third-party application. The application needs to
        /// redirect the merchant to the external location where they can perform the action.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("externalAction")]
        public virtual ExternalAction ExternalAction { get; set; }

        /// <summary>
        /// Controlling whether the button is active or disabled. The value is 'false' when the action was already
        /// requested or is not available. If the action is not available then a reason will be present. If (your)
        /// third-party application shows a disabled button for action that is not available, then it should also show
        /// reasons.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isAvailable")]
        public virtual System.Nullable<bool> IsAvailable { get; set; }

        /// <summary>
        /// List of reasons why the action is not available. The list of reasons is empty if the action is available. If
        /// there is only one reason, it can be displayed next to the disabled button. If there are more reasons, all of
        /// them should be displayed, for example in a pop-up dialog.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reasons")]
        public virtual System.Collections.Generic.IList<ActionReason> Reasons { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Flow that can be selected for an action. When merchant selects a flow, application should open a dialog with
    /// more information and input form.
    /// </summary>
    public class ActionFlow : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Label for the button to trigger the action from the action dialog. For example: "Request review"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dialogButtonLabel")]
        public virtual string DialogButtonLabel { get; set; }

        /// <summary>
        /// Important message to be highlighted in the request dialog. For example: "You can only request a review for
        /// disagreeing with this issue once. If it's not approved, you'll need to fix the issue and wait a few days
        /// before you can request another review."
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dialogCallout")]
        public virtual Callout DialogCallout { get; set; }

        /// <summary>
        /// Message displayed in the request dialog. For example: "Make sure you've fixed all your country-specific
        /// issues. If not, you may have to wait 7 days to request another review". There may be an more information to
        /// be shown in a tooltip.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dialogMessage")]
        public virtual TextWithTooltip DialogMessage { get; set; }

        /// <summary>Title of the request dialog. For example: "Before you request a review"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dialogTitle")]
        public virtual string DialogTitle { get; set; }

        /// <summary>Not for display but need to be sent back for the selected action flow.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; }

        /// <summary>A list of input fields.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inputs")]
        public virtual System.Collections.Generic.IList<InputField> Inputs { get; set; }

        /// <summary>
        /// Text value describing the intent for the action flow. It can be used as an input label if merchant needs to
        /// pick one of multiple flows. For example: "I disagree with the issue"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("label")]
        public virtual string Label { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Input provided by the merchant.</summary>
    public class ActionInput : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. Id of the selected action flow.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("actionFlowId")]
        public virtual string ActionFlowId { get; set; }

        /// <summary>Required. Values for input fields.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inputValues")]
        public virtual System.Collections.Generic.IList<InputValue> InputValues { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A single reason why the action is not available.</summary>
    public class ActionReason : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Optional. An action that needs to be performed to solve the problem represented by this reason. This action
        /// will always be available. Should be rendered as a link or button next to the summarizing message. For
        /// example, the review may be available only once merchant configure all required attributes. In such a
        /// situation this action can be a link to the form, where they can fill the missing attribute to unblock the
        /// main action.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("action")]
        public virtual Action Action { get; set; }

        /// <summary>Detailed explanation of the reason. Should be displayed as a hint if present.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("detail")]
        public virtual string Detail { get; set; }

        /// <summary>
        /// Messages summarizing the reason, why the action is not available. For example: "Review requested on Jan 03.
        /// Review requests can take a few days to complete."
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("message")]
        public virtual string Message { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class Address : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Required. Top-level administrative subdivision of the country. For example, a state like California ("CA")
        /// or a province like Quebec ("QC").
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("administrativeArea")]
        public virtual string AdministrativeArea { get; set; }

        /// <summary>
        /// Required. City, town or commune. May also include dependent localities or sublocalities (for example,
        /// neighborhoods or suburbs).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("city")]
        public virtual string City { get; set; }

        /// <summary>
        /// Required. [CLDR country code](https://github.com/unicode-org/cldr/blob/latest/common/main/en.xml) (for
        /// example, "US").
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; }

        /// <summary>Required. Postal code or ZIP (for example, "94043").</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("postalCode")]
        public virtual string PostalCode { get; set; }

        /// <summary>Street-level part of the address. Use `\n` to add a second line.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("streetAddress")]
        public virtual string StreetAddress { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// The Alternate Dispute Resolution (ADR) that may be available to merchants in some regions. If present, the link
    /// should be shown on the same page as the list of issues.
    /// </summary>
    public class AlternateDisputeResolution : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The label for the alternate dispute resolution link.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("label")]
        public virtual string Label { get; set; }

        /// <summary>
        /// The URL pointing to a page, where merchant can request alternative dispute resolution with an [external
        /// body](https://support.google.com/european-union-digital-services-act-redress-options/answer/13535501).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("uri")]
        public virtual string Uri { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Represents attribution settings for conversion sources receiving pre-attribution data.</summary>
    public class AttributionSettings : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Required. Lookback windows (in days) used for attribution in this source. Supported values are 7, 30, 40.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("attributionLookbackWindowInDays")]
        public virtual System.Nullable<int> AttributionLookbackWindowInDays { get; set; }

        [Newtonsoft.Json.JsonPropertyAttribute("attributionModel")]
        public virtual string AttributionModel { get; set; }

        /// <summary>
        /// Immutable. Unordered list. List of different conversion types a conversion event can be classified as. A
        /// standard "purchase" type will be automatically created if this list is empty at creation time.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("conversionType")]
        public virtual System.Collections.Generic.IList<AttributionSettingsConversionType> ConversionType { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Message representing a types of conversion events</summary>
    public class AttributionSettingsConversionType : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Output only. Option indicating if the type should be included in Merchant Center reporting.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("includeInReporting")]
        public virtual System.Nullable<bool> IncludeInReporting { get; set; }

        /// <summary>Output only. Conversion event name, as it'll be reported by the client.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Fields related to the [Best sellers reports](https://support.google.com/merchants/answer/9488679).
    /// </summary>
    public class BestSellers : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Google product category ID to calculate the ranking for, represented in [Google's product
        /// taxonomy](https://support.google.com/merchants/answer/6324436). If a `WHERE` condition on
        /// `best_sellers.category_id` is not specified in the query, rankings for all top-level categories are
        /// returned.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categoryId")]
        public virtual System.Nullable<long> CategoryId { get; set; }

        /// <summary>
        /// Country where the ranking is calculated. A `WHERE` condition on `best_sellers.country_code` is required in
        /// the query.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("countryCode")]
        public virtual string CountryCode { get; set; }

        /// <summary>Popularity rank in the previous week or month.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("previousRank")]
        public virtual System.Nullable<long> PreviousRank { get; set; }

        /// <summary>
        /// Estimated demand in relation to the item with the highest popularity rank in the same category and country
        /// in the previous week or month.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("previousRelativeDemand")]
        public virtual string PreviousRelativeDemand { get; set; }

        /// <summary>
        /// Popularity on Shopping ads and free listings, in the selected category and country, based on the estimated
        /// number of units sold.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rank")]
        public virtual System.Nullable<long> Rank { get; set; }

        /// <summary>
        /// Estimated demand in relation to the item with the highest popularity rank in the same category and country.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("relativeDemand")]
        public virtual string RelativeDemand { get; set; }

        /// <summary>Change in the estimated demand. Whether it rose, sank or remained flat.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("relativeDemandChange")]
        public virtual string RelativeDemandChange { get; set; }

        /// <summary>
        /// Report date. The value of this field can only be one of the following: * The first day of the week (Monday)
        /// for weekly reports. * The first day of the month for monthly reports. If a `WHERE` condition on
        /// `best_sellers.report_date` is not specified in the query, the latest available weekly or monthly report is
        /// returned.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reportDate")]
        public virtual Date ReportDate { get; set; }

        /// <summary>
        /// Granularity of the report. The ranking can be done over a week or a month timeframe. A `WHERE` condition on
        /// `best_sellers.report_granularity` is required in the query.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reportGranularity")]
        public virtual string ReportGranularity { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Brand fields. Values are only set for fields requested explicitly in the request's search query.
    /// </summary>
    public class Brand : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Name of the brand.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// A detailed impact breakdown for a group of regions where the impact of the issue on different shopping
    /// destinations is the same.
    /// </summary>
    public class Breakdown : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Human readable, localized description of issue's effect on different targets. Should be rendered as a list.
        /// For example: * "Products not showing in ads" * "Products not showing organically"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("details")]
        public virtual System.Collections.Generic.IList<string> Details { get; set; }

        /// <summary>
        /// Lists of regions. Should be rendered as a title for this group of details. The full list should be shown to
        /// merchant. If the list is too long, it is recommended to make it expandable.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("regions")]
        public virtual System.Collections.Generic.IList<BreakdownRegion> Regions { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Region with code and localized name.</summary>
    public class BreakdownRegion : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The [CLDR territory code] (http://www.unicode.org/repos/cldr/tags/latest/common/main/en.xml)
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("code")]
        public virtual string Code { get; set; }

        /// <summary>
        /// The localized name of the region. For region with code='001' the value is 'All countries' or the equivalent
        /// in other languages.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Action that is implemented and performed in (your) third-party application. Represents various functionality
    /// that is expected to be available to merchant and will help them with resolving the issue. The application should
    /// point the merchant to the place, where they can access the corresponding functionality. If the functionality is
    /// not supported, it is recommended to explain the situation to merchant and provide them with instructions how to
    /// solve the issue.
    /// </summary>
    public class BuiltInSimpleAction : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Long text from an external source that should be available to the merchant. Present when the type is
        /// `SHOW_ADDITIONAL_CONTENT`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("additionalContent")]
        public virtual BuiltInSimpleActionAdditionalContent AdditionalContent { get; set; }

        /// <summary>
        /// The attribute that needs to be updated. Present when the type is `EDIT_ITEM_ATTRIBUTE`. This field contains
        /// a code for attribute, represented in snake_case. You can find a list of product's attributes, with their
        /// codes [here](https://support.google.com/merchants/answer/7052112).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("attributeCode")]
        public virtual string AttributeCode { get; set; }

        /// <summary>
        /// The type of action that represents a functionality that is expected to be available in third-party
        /// application.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Long text from external source.</summary>
    public class BuiltInSimpleActionAdditionalContent : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Long text organized into paragraphs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("paragraphs")]
        public virtual System.Collections.Generic.IList<string> Paragraphs { get; set; }

        /// <summary>Title of the additional content;</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Action that is implemented and performed in (your) third-party application. The application needs to show an
    /// additional content and input form to the merchant. They can start the action only when they provided all
    /// required inputs. The application will request processing of the action by calling the [triggeraction
    /// method](https://developers.google.com/shopping-content/reference/rest/v2.1/merchantsupport/triggeraction).
    /// </summary>
    public class BuiltInUserInputAction : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Internal details. Not for display but need to be sent back when triggering the action.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("actionContext")]
        public virtual string ActionContext { get; set; }

        /// <summary>
        /// Actions may provide multiple different flows. Merchant selects one that fits best to their intent. Selecting
        /// the flow is the first step in user's interaction with the action. It affects what input fields will be
        /// available and required and also how the request will be processed.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("flows")]
        public virtual System.Collections.Generic.IList<ActionFlow> Flows { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class BusinessDayConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Regular business days, such as '"monday"'. May not be empty.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("businessDays")]
        public virtual System.Collections.Generic.IList<string> BusinessDays { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>An important message that should be highlighted. Usually displayed as a banner.</summary>
    public class Callout : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A full message that needs to be shown to the merchant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fullMessage")]
        public virtual TextWithTooltip FullMessage { get; set; }

        /// <summary>
        /// Can be used to render messages with different severity in different styles. Snippets off all types contain
        /// important information that should be displayed to merchants.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("styleHint")]
        public virtual string StyleHint { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class CarrierRate : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Carrier service, such as `"UPS"` or `"Fedex"`. The list of supported carriers can be retrieved through the
        /// `getSupportedCarriers` method. Required.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("carrierName")]
        public virtual string CarrierName { get; set; }

        /// <summary>
        /// Carrier service, such as `"ground"` or `"2 days"`. The list of supported services for a carrier can be
        /// retrieved through the `getSupportedCarriers` method. Required.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("carrierService")]
        public virtual string CarrierService { get; set; }

        /// <summary>
        /// Additive shipping rate modifier. Can be negative. For example `{ "value": "1", "currency" : "USD" }` adds $1
        /// to the rate, `{ "value": "-3", "currency" : "USD" }` removes $3 from the rate. Optional.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("flatAdjustment")]
        public virtual Price FlatAdjustment { get; set; }

        /// <summary>Name of the carrier rate. Must be unique per rate group. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        /// <summary>Shipping origin for this carrier rate. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("originPostalCode")]
        public virtual string OriginPostalCode { get; set; }

        /// <summary>
        /// Multiplicative shipping rate modifier as a number in decimal notation. Can be negative. For example `"5.4"`
        /// increases the rate by 5.4%, `"-3"` decreases the rate by 3%. Optional.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("percentageAdjustment")]
        public virtual string PercentageAdjustment { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class CarriersCarrier : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The CLDR country code of the carrier (for example, "US"). Always present.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; }

        /// <summary>
        /// A list of services supported for EDD (Estimated Delivery Date) calculation. This is the list of valid values
        /// for WarehouseBasedDeliveryTime.carrierService.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("eddServices")]
        public virtual System.Collections.Generic.IList<string> EddServices { get; set; }

        /// <summary>The name of the carrier (for example, `"UPS"`). Always present.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        /// <summary>
        /// A list of supported services (for example, `"ground"`) for that carrier. Contains at least one service. This
        /// is the list of valid values for CarrierRate.carrierService.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("services")]
        public virtual System.Collections.Generic.IList<string> Services { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>`CheckoutSettings` for a specific merchant ID.</summary>
    public class CheckoutSettings : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Output only. The effective value of enrollment state for a given merchant ID. If account level settings are
        /// present then this value will be a copy of the account level settings. Otherwise, it will have the value of
        /// the parent account.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("effectiveEnrollmentState")]
        public virtual string EffectiveEnrollmentState { get; set; }

        /// <summary>
        /// Output only. The effective value of review state for a given merchant ID. If account level settings are
        /// present then this value will be a copy of the account level settings. Otherwise, it will have the value of
        /// the parent account.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("effectiveReviewState")]
        public virtual string EffectiveReviewState { get; set; }

        /// <summary>
        /// The effective value of `url_settings` for a given merchant ID. If account level settings are present then
        /// this value will be a copy of the account level settings. Otherwise, it will have the value of the parent
        /// account.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("effectiveUriSettings")]
        public virtual UrlSettings EffectiveUriSettings { get; set; }

        /// <summary>Output only. Reflects the merchant enrollment state in `Checkout` feature.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("enrollmentState")]
        public virtual string EnrollmentState { get; set; }

        /// <summary>Required. The ID of the account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("merchantId")]
        public virtual System.Nullable<long> MerchantId { get; set; }

        /// <summary>
        /// Output only. Reflects the merchant review state in `Checkout` feature. This is set based on the data quality
        /// reviews of the URL provided by the merchant. A merchant with enrollment state as `ENROLLED` can be in the
        /// following review states: `IN_REVIEW`, `APPROVED` or `DISAPPROVED`. A merchant must be in an enrollment_state
        /// of `ENROLLED` before a review can begin for the merchant.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reviewState")]
        public virtual string ReviewState { get; set; }

        /// <summary>URL settings for cart or checkout URL.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("uriSettings")]
        public virtual UrlSettings UriSettings { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Product property for the Cloud Retail API. For example, properties for a TV product could be "Screen-Resolution"
    /// or "Screen-Size".
    /// </summary>
    public class CloudExportAdditionalProperties : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Boolean value of the given property. For example for a TV product, "True" or "False" if the screen is UHD.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("boolValue")]
        public virtual System.Nullable<bool> BoolValue { get; set; }

        /// <summary>
        /// Float values of the given property. For example for a TV product 1.2345. Maximum number of specified values
        /// for this field is 400. Values are stored in an arbitrary but consistent order.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("floatValue")]
        public virtual System.Collections.Generic.IList<System.Nullable<float>> FloatValue { get; set; }

        /// <summary>
        /// Integer values of the given property. For example, 1080 for a screen resolution of a TV product. Maximum
        /// number of specified values for this field is 400. Values are stored in an arbitrary but consistent order.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("intValue")]
        public virtual System.Collections.Generic.IList<System.Nullable<long>> IntValue { get; set; }

        /// <summary>Maximum float value of the given property. For example for a TV product 100.00.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxValue")]
        public virtual System.Nullable<float> MaxValue { get; set; }

        /// <summary>Minimum float value of the given property. For example for a TV product 1.00.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minValue")]
        public virtual System.Nullable<float> MinValue { get; set; }

        /// <summary>
        /// Name of the given property. For example, "Screen-Resolution" for a TV product. Maximum string size is 256
        /// characters.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("propertyName")]
        public virtual string PropertyName { get; set; }

        /// <summary>
        /// Text value of the given property. For example, "8K(UHD)" could be a text value for a TV product. Maximum
        /// number of specified values for this field is 400. Values are stored in an arbitrary but consistent order.
        /// Maximum string size is 256 characters.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("textValue")]
        public virtual System.Collections.Generic.IList<string> TextValue { get; set; }

        /// <summary>
        /// Unit of the given property. For example, "Pixels" for a TV product. Maximum string size is 256 bytes.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("unitCode")]
        public virtual string UnitCode { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The collection message.</summary>
    public class Collection : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Label that you assign to a collection to help organize bidding and reporting in Shopping campaigns. [Custom
        /// label](https://support.google.com/merchants/answer/9674217)
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customLabel0")]
        public virtual string CustomLabel0 { get; set; }

        /// <summary>
        /// Label that you assign to a collection to help organize bidding and reporting in Shopping campaigns.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customLabel1")]
        public virtual string CustomLabel1 { get; set; }

        /// <summary>
        /// Label that you assign to a collection to help organize bidding and reporting in Shopping campaigns.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customLabel2")]
        public virtual string CustomLabel2 { get; set; }

        /// <summary>
        /// Label that you assign to a collection to help organize bidding and reporting in Shopping campaigns.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customLabel3")]
        public virtual string CustomLabel3 { get; set; }

        /// <summary>
        /// Label that you assign to a collection to help organize bidding and reporting in Shopping campaigns.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customLabel4")]
        public virtual string CustomLabel4 { get; set; }

        /// <summary>
        /// This identifies one or more products associated with the collection. Used as a lookup to the corresponding
        /// product ID in your product feeds. Provide a maximum of 100 featuredProduct (for collections). Provide up to
        /// 10 featuredProduct (for Shoppable Images only) with ID and X and Y coordinates. [featured_product
        /// attribute](https://support.google.com/merchants/answer/9703736)
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("featuredProduct")]
        public virtual System.Collections.Generic.IList<CollectionFeaturedProduct> FeaturedProduct { get; set; }

        /// <summary>
        /// Your collection's name. [headline attribute](https://support.google.com/merchants/answer/9673580)
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("headline")]
        public virtual System.Collections.Generic.IList<string> Headline { get; set; }

        /// <summary>
        /// Required. The REST ID of the collection. Content API methods that operate on collections take this as their
        /// collectionId parameter. The REST ID for a collection is of the form collectionId. [id
        /// attribute](https://support.google.com/merchants/answer/9649290)
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; }

        /// <summary>
        /// The URL of a collection’s image. [image_link attribute](https://support.google.com/merchants/answer/9703236)
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("imageLink")]
        public virtual System.Collections.Generic.IList<string> ImageLink { get; set; }

        /// <summary>
        /// The language of a collection and the language of any featured products linked to the collection. [language
        /// attribute](https://support.google.com/merchants/answer/9673781)
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("language")]
        public virtual string Language { get; set; }

        /// <summary>
        /// A collection’s landing page. URL directly linking to your collection's page on your website. [link
        /// attribute](https://support.google.com/merchants/answer/9673983)
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("link")]
        public virtual string Link { get; set; }

        /// <summary>
        /// A collection’s mobile-optimized landing page when you have a different URL for mobile and desktop traffic.
        /// [mobile_link attribute](https://support.google.com/merchants/answer/9646123)
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("mobileLink")]
        public virtual string MobileLink { get; set; }

        /// <summary>[product_country attribute](https://support.google.com/merchants/answer/9674155)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productCountry")]
        public virtual string ProductCountry { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// The message for FeaturedProduct. [FeaturedProduct](https://support.google.com/merchants/answer/9703736)
    /// </summary>
    public class CollectionFeaturedProduct : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The unique identifier for the product item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("offerId")]
        public virtual string OfferId { get; set; }

        /// <summary>Required. X-coordinate of the product callout on the Shoppable Image.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("x")]
        public virtual System.Nullable<float> X { get; set; }

        /// <summary>Required. Y-coordinate of the product callout on the Shoppable Image.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("y")]
        public virtual System.Nullable<float> Y { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The collectionstatus message.</summary>
    public class CollectionStatus : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A list of all issues associated with the collection.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("collectionLevelIssuses")]
        public virtual System.Collections.Generic.IList<CollectionStatusItemLevelIssue> CollectionLevelIssuses { get; set; }

        /// <summary>
        /// Date on which the collection has been created in [ISO 8601](http://en.wikipedia.org/wiki/ISO_8601) format:
        /// Date, time, and offset, for example "2020-01-02T09:00:00+01:00" or "2020-01-02T09:00:00Z"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("creationDate")]
        public virtual string CreationDate { get; set; }

        /// <summary>The intended destinations for the collection.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("destinationStatuses")]
        public virtual System.Collections.Generic.IList<CollectionStatusDestinationStatus> DestinationStatuses { get; set; }

        /// <summary>Required. The ID of the collection for which status is reported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; }

        /// <summary>
        /// Date on which the collection has been last updated in [ISO 8601](http://en.wikipedia.org/wiki/ISO_8601)
        /// format: Date, time, and offset, for example "2020-01-02T09:00:00+01:00" or "2020-01-02T09:00:00Z"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("lastUpdateDate")]
        public virtual string LastUpdateDate { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Destination status message.</summary>
    public class CollectionStatusDestinationStatus : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Country codes (ISO 3166-1 alpha-2) where the collection is approved.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("approvedCountries")]
        public virtual System.Collections.Generic.IList<string> ApprovedCountries { get; set; }

        /// <summary>The name of the destination</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("destination")]
        public virtual string Destination { get; set; }

        /// <summary>Country codes (ISO 3166-1 alpha-2) where the collection is disapproved.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("disapprovedCountries")]
        public virtual System.Collections.Generic.IList<string> DisapprovedCountries { get; set; }

        /// <summary>Country codes (ISO 3166-1 alpha-2) where the collection is pending approval.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pendingCountries")]
        public virtual System.Collections.Generic.IList<string> PendingCountries { get; set; }

        /// <summary>The status for the specified destination in the collections target country.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Issue associated with the collection.</summary>
    public class CollectionStatusItemLevelIssue : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Country codes (ISO 3166-1 alpha-2) where issue applies to the offer.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("applicableCountries")]
        public virtual System.Collections.Generic.IList<string> ApplicableCountries { get; set; }

        /// <summary>The attribute's name, if the issue is caused by a single attribute.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("attributeName")]
        public virtual string AttributeName { get; set; }

        /// <summary>The error code of the issue.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("code")]
        public virtual string Code { get; set; }

        /// <summary>A short issue description in English.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; }

        /// <summary>The destination the issue applies to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("destination")]
        public virtual string Destination { get; set; }

        /// <summary>A detailed issue description in English.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("detail")]
        public virtual string Detail { get; set; }

        /// <summary>The URL of a web page to help with resolving this issue.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("documentation")]
        public virtual string Documentation { get; set; }

        /// <summary>Whether the issue can be resolved by the merchant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("resolution")]
        public virtual string Resolution { get; set; }

        /// <summary>How this issue affects the serving of the collection.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("servability")]
        public virtual string Servability { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Fields related to [competitive visibility reports] (https://support.google.com/merchants/answer/11366442).
    /// </summary>
    public class CompetitiveVisibility : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// [Ads / organic ratio] (https://support.google.com/merchants/answer/11366442#zippy=%2Cadsfree-ratio) shows
        /// how often a merchant receives impressions from Shopping ads compared to organic traffic. The number is
        /// rounded and bucketed. Available only in `CompetitiveVisibilityTopMerchantView` and
        /// `CompetitiveVisibilityCompetitorView`. Cannot be filtered on in the 'WHERE' clause.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("adsOrganicRatio")]
        public virtual System.Nullable<double> AdsOrganicRatio { get; set; }

        /// <summary>
        /// Change in visibility based on impressions with respect to the start of the selected time range (or first day
        /// with non-zero impressions) for a combined set of merchants with highest visibility approximating the market.
        /// Available only in `CompetitiveVisibilityBenchmarkView`. Cannot be filtered on in the 'WHERE' clause.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categoryBenchmarkVisibilityTrend")]
        public virtual System.Nullable<double> CategoryBenchmarkVisibilityTrend { get; set; }

        /// <summary>
        /// Google product category ID to calculate the report for, represented in [Google's product
        /// taxonomy](https://support.google.com/merchants/answer/6324436). Required in the `SELECT` clause. A `WHERE`
        /// condition on `competitive_visibility.category_id` is required in the query.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categoryId")]
        public virtual System.Nullable<long> CategoryId { get; set; }

        /// <summary>
        /// The country where impression appeared. Required in the `SELECT` clause. A `WHERE` condition on
        /// `competitive_visibility.country_code` is required in the query.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("countryCode")]
        public virtual string CountryCode { get; set; }

        /// <summary>
        /// Date of this row. Available only in `CompetitiveVisibilityBenchmarkView` and
        /// `CompetitiveVisibilityCompetitorView`. Required in the `SELECT` clause for
        /// `CompetitiveVisibilityMarketBenchmarkView`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("date")]
        public virtual Date Date { get; set; }

        /// <summary>
        /// Domain of your competitor or your domain, if 'is_your_domain' is true. Available only in
        /// `CompetitiveVisibilityTopMerchantView` and `CompetitiveVisibilityCompetitorView`. Required in the `SELECT`
        /// clause for `CompetitiveVisibilityTopMerchantView` and `CompetitiveVisibilityCompetitorView`. Cannot be
        /// filtered on in the 'WHERE' clause.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("domain")]
        public virtual string Domain { get; set; }

        /// <summary>
        /// Higher position rate shows how often a competitor’s offer got placed in a higher position on the page than
        /// your offer. Available only in `CompetitiveVisibilityTopMerchantView` and
        /// `CompetitiveVisibilityCompetitorView`. Cannot be filtered on in the 'WHERE' clause.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("higherPositionRate")]
        public virtual System.Nullable<double> HigherPositionRate { get; set; }

        /// <summary>
        /// True if this row contains data for your domain. Available only in `CompetitiveVisibilityTopMerchantView` and
        /// `CompetitiveVisibilityCompetitorView`. Cannot be filtered on in the 'WHERE' clause.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isYourDomain")]
        public virtual System.Nullable<bool> IsYourDomain { get; set; }

        /// <summary>
        /// Page overlap rate describes how frequently competing retailers’ offers are shown together with your offers
        /// on the same page. Available only in `CompetitiveVisibilityTopMerchantView` and
        /// `CompetitiveVisibilityCompetitorView`. Cannot be filtered on in the 'WHERE' clause.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageOverlapRate")]
        public virtual System.Nullable<double> PageOverlapRate { get; set; }

        /// <summary>
        /// Position of the domain in the top merchants ranking for the selected keys (`date`, `category_id`,
        /// `country_code`, `listing_type`) based on impressions. 1 is the highest. Available only in
        /// `CompetitiveVisibilityTopMerchantView` and `CompetitiveVisibilityCompetitorView`. Cannot be filtered on in
        /// the 'WHERE' clause.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rank")]
        public virtual System.Nullable<ulong> Rank { get; set; }

        /// <summary>
        /// Relative visibility shows how often your competitors’ offers are shown compared to your offers. In other
        /// words, this is the number of displayed impressions of a competitor retailer divided by the number of your
        /// displayed impressions during a selected time range for a selected product category and country. Available
        /// only in `CompetitiveVisibilityCompetitorView`. Cannot be filtered on in the 'WHERE' clause.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("relativeVisibility")]
        public virtual System.Nullable<double> RelativeVisibility { get; set; }

        /// <summary>
        /// Type of impression listing. Required in the `SELECT` clause. Cannot be filtered on in the 'WHERE' clause.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("trafficSource")]
        public virtual string TrafficSource { get; set; }

        /// <summary>
        /// Change in visibility based on impressions for your domain with respect to the start of the selected time
        /// range (or first day with non-zero impressions). Available only in `CompetitiveVisibilityBenchmarkView`.
        /// Cannot be filtered on in the 'WHERE' clause.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("yourDomainVisibilityTrend")]
        public virtual System.Nullable<double> YourDomainVisibilityTrend { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Represents a conversion source owned by a Merchant account. A merchant account can have up to 200 conversion
    /// sources.
    /// </summary>
    public class ConversionSource : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Output only. Generated by the Content API upon creation of a new `ConversionSource`. Format: [a-z]{4}:.+ The
        /// four characters before the colon represent the type of conversio source. Content after the colon represents
        /// the ID of the conversion source within that type. The ID of two different conversion sources might be the
        /// same across different types. The following type prefixes are supported: - galk: For GoogleAnalyticsLink
        /// sources. - mcdn: For MerchantCenterDestination sources.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("conversionSourceId")]
        public virtual string ConversionSourceId { get; set; }

        private string _expireTimeRaw;

        private object _expireTime;

        /// <summary>
        /// Output only. The time when an archived conversion source becomes permanently deleted and is no longer
        /// available to undelete.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("expireTime")]
        public virtual string ExpireTimeRaw
        {
            get => _expireTimeRaw;
            set
            {
                _expireTime = Google.Apis.Util.Utilities.DeserializeForGoogleFormat(value);
                _expireTimeRaw = value;
            }
        }

        /// <summary><seealso cref="object"/> representation of <see cref="ExpireTimeRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnoreAttribute]
        [System.ObsoleteAttribute("This property is obsolete and may behave unexpectedly; please use ExpireTimeDateTimeOffset instead.")]
        public virtual object ExpireTime
        {
            get => _expireTime;
            set
            {
                _expireTimeRaw = Google.Apis.Util.Utilities.SerializeForGoogleFormat(value);
                _expireTime = value;
            }
        }

        /// <summary><seealso cref="System.DateTimeOffset"/> representation of <see cref="ExpireTimeRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnoreAttribute]
        public virtual System.DateTimeOffset? ExpireTimeDateTimeOffset
        {
            get => Google.Apis.Util.DiscoveryFormat.ParseGoogleDateTimeToDateTimeOffset(ExpireTimeRaw);
            set => ExpireTimeRaw = Google.Apis.Util.DiscoveryFormat.FormatDateTimeOffsetToGoogleDateTime(value);
        }

        /// <summary>Immutable. Conversion Source of type "Link to Google Analytics Property".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("googleAnalyticsLink")]
        public virtual GoogleAnalyticsLink GoogleAnalyticsLink { get; set; }

        /// <summary>Conversion Source of type "Merchant Center Tag Destination".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("merchantCenterDestination")]
        public virtual MerchantCenterDestination MerchantCenterDestination { get; set; }

        /// <summary>Output only. Current state of this conversion source. Can't be edited through the API.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("state")]
        public virtual string State { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Information about CSS domain.</summary>
    public class Css : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Output only. Immutable. The CSS domain ID.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cssDomainId")]
        public virtual System.Nullable<long> CssDomainId { get; set; }

        /// <summary>
        /// Output only. Immutable. The ID of the CSS group this CSS domain is affiliated with. Only populated for CSS
        /// group users.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cssGroupId")]
        public virtual System.Nullable<long> CssGroupId { get; set; }

        /// <summary>Output only. Immutable. The CSS domain's display name, used when space is constrained.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; }

        /// <summary>Output only. Immutable. The CSS domain's full name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fullName")]
        public virtual string FullName { get; set; }

        /// <summary>Output only. Immutable. The CSS domain's homepage.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("homepageUri")]
        public virtual string HomepageUri { get; set; }

        /// <summary>
        /// A list of label IDs that are assigned to this CSS domain by its CSS group. Only populated for CSS group
        /// users.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("labelIds")]
        public virtual System.Collections.Generic.IList<System.Nullable<long>> LabelIds { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// A message that represents custom attributes. Exactly one of `value` or `groupValues` must be provided. Maximum
    /// allowed number of characters for each custom attribute is 10240 (represents sum of characters for name and
    /// value). Maximum 2500 custom attributes can be set per merchant, with total size of 102.4kB.
    /// </summary>
    public class CustomAttribute : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Subattributes within this attribute group. Exactly one of value or groupValues must be provided.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("groupValues")]
        public virtual System.Collections.Generic.IList<CustomAttribute> GroupValues { get; set; }

        /// <summary>The name of the attribute. Underscores will be replaced by spaces upon insertion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        /// <summary>The value of the attribute.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class CutoffTime : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Hour of the cutoff time until which an order has to be placed to be processed in the same day. Required.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hour")]
        public virtual System.Nullable<long> Hour { get; set; }

        /// <summary>
        /// Minute of the cutoff time until which an order has to be placed to be processed in the same day. Required.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minute")]
        public virtual System.Nullable<long> Minute { get; set; }

        /// <summary>
        /// Timezone identifier for the cutoff time (for example, "Europe/Zurich"). List of identifiers. Required.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("timezone")]
        public virtual string Timezone { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Datafeed configuration data.</summary>
    public class Datafeed : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The two-letter ISO 639-1 language in which the attributes are defined in the data feed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("attributeLanguage")]
        public virtual string AttributeLanguage { get; set; }

        /// <summary>
        /// Required. The type of data feed. For product inventory feeds, only feeds for local stores, not online
        /// stores, are supported. Acceptable values are: - "`local products`" - "`product inventory`" - "`products`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contentType")]
        public virtual string ContentType { get; set; }

        /// <summary>Fetch schedule for the feed file.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fetchSchedule")]
        public virtual DatafeedFetchSchedule FetchSchedule { get; set; }

        /// <summary>Required. The filename of the feed. All feeds must have a unique file name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fileName")]
        public virtual string FileName { get; set; }

        /// <summary>Format of the feed file.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("format")]
        public virtual DatafeedFormat Format { get; set; }

        /// <summary>Required for update. The ID of the data feed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual System.Nullable<long> Id { get; set; }

        /// <summary>Identifies what kind of resource this is. Value: the fixed string "`content#datafeed`"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>Required for insert. A descriptive name of the data feed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        /// <summary>The targets this feed should apply to (country, language, destinations).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targets")]
        public virtual System.Collections.Generic.IList<DatafeedTarget> Targets { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// The required fields vary based on the frequency of fetching. For a monthly fetch schedule, day_of_month and hour
    /// are required. For a weekly fetch schedule, weekday and hour are required. For a daily fetch schedule, only hour
    /// is required.
    /// </summary>
    public class DatafeedFetchSchedule : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The day of the month the feed file should be fetched (1-31).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dayOfMonth")]
        public virtual System.Nullable<long> DayOfMonth { get; set; }

        /// <summary>
        /// The URL where the feed file can be fetched. Google Merchant Center will support automatic scheduled uploads
        /// using the HTTP, HTTPS, FTP, or SFTP protocols, so the value will need to be a valid link using one of those
        /// four protocols.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fetchUrl")]
        public virtual string FetchUrl { get; set; }

        /// <summary>The hour of the day the feed file should be fetched (0-23).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hour")]
        public virtual System.Nullable<long> Hour { get; set; }

        /// <summary>The minute of the hour the feed file should be fetched (0-59). Read-only.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minuteOfHour")]
        public virtual System.Nullable<long> MinuteOfHour { get; set; }

        /// <summary>An optional password for fetch_url.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("password")]
        public virtual string Password { get; set; }

        /// <summary>Whether the scheduled fetch is paused or not.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("paused")]
        public virtual System.Nullable<bool> Paused { get; set; }

        /// <summary>Time zone used for schedule. UTC by default. For example, "America/Los_Angeles".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("timeZone")]
        public virtual string TimeZone { get; set; }

        /// <summary>An optional user name for fetch_url.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("username")]
        public virtual string Username { get; set; }

        /// <summary>
        /// The day of the week the feed file should be fetched. Acceptable values are: - "`monday`" - "`tuesday`" -
        /// "`wednesday`" - "`thursday`" - "`friday`" - "`saturday`" - "`sunday`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("weekday")]
        public virtual string Weekday { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class DatafeedFormat : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Delimiter for the separation of values in a delimiter-separated values feed. If not specified, the delimiter
        /// will be auto-detected. Ignored for non-DSV data feeds. Acceptable values are: - "`pipe`" - "`tab`" -
        /// "`tilde`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("columnDelimiter")]
        public virtual string ColumnDelimiter { get; set; }

        /// <summary>
        /// Character encoding scheme of the data feed. If not specified, the encoding will be auto-detected. Acceptable
        /// values are: - "`latin-1`" - "`utf-16be`" - "`utf-16le`" - "`utf-8`" - "`windows-1252`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fileEncoding")]
        public virtual string FileEncoding { get; set; }

        /// <summary>
        /// Specifies how double quotes are interpreted. If not specified, the mode will be auto-detected. Ignored for
        /// non-DSV data feeds. Acceptable values are: - "`normal character`" - "`value quoting`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("quotingMode")]
        public virtual string QuotingMode { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// The status of a datafeed, that is, the result of the last retrieval of the datafeed computed asynchronously when
    /// the feed processing is finished.
    /// </summary>
    public class DatafeedStatus : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The country for which the status is reported, represented as a CLDR territory code.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; }

        /// <summary>The ID of the feed for which the status is reported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datafeedId")]
        public virtual System.Nullable<ulong> DatafeedId { get; set; }

        /// <summary>The list of errors occurring in the feed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("errors")]
        public virtual System.Collections.Generic.IList<DatafeedStatusError> Errors { get; set; }

        /// <summary>The feed label status is reported for.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("feedLabel")]
        public virtual string FeedLabel { get; set; }

        /// <summary>The number of items in the feed that were processed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemsTotal")]
        public virtual System.Nullable<ulong> ItemsTotal { get; set; }

        /// <summary>The number of items in the feed that were valid.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemsValid")]
        public virtual System.Nullable<ulong> ItemsValid { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#datafeedStatus`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The two-letter ISO 639-1 language for which the status is reported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("language")]
        public virtual string Language { get; set; }

        /// <summary>The last date at which the feed was uploaded.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("lastUploadDate")]
        public virtual string LastUploadDate { get; set; }

        /// <summary>
        /// The processing status of the feed. Acceptable values are: - "`"`failure`": The feed could not be processed
        /// or all items had errors.`" - "`in progress`": The feed is being processed. - "`none`": The feed has not yet
        /// been processed. For example, a feed that has never been uploaded will have this processing status. -
        /// "`success`": The feed was processed successfully, though some items might have had errors.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("processingStatus")]
        public virtual string ProcessingStatus { get; set; }

        /// <summary>The list of errors occurring in the feed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("warnings")]
        public virtual System.Collections.Generic.IList<DatafeedStatusError> Warnings { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>An error occurring in the feed, like "invalid price".</summary>
    public class DatafeedStatusError : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The code of the error, for example, "validation/invalid_value".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("code")]
        public virtual string Code { get; set; }

        /// <summary>The number of occurrences of the error in the feed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("count")]
        public virtual System.Nullable<ulong> Count { get; set; }

        /// <summary>A list of example occurrences of the error, grouped by product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("examples")]
        public virtual System.Collections.Generic.IList<DatafeedStatusExample> Examples { get; set; }

        /// <summary>The error message, for example, "Invalid price".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("message")]
        public virtual string Message { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>An example occurrence for a particular error.</summary>
    public class DatafeedStatusExample : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the example item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemId")]
        public virtual string ItemId { get; set; }

        /// <summary>Line number in the data feed where the example is found.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("lineNumber")]
        public virtual System.Nullable<ulong> LineNumber { get; set; }

        /// <summary>The problematic value.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class DatafeedTarget : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Deprecated. Use `feedLabel` instead. The country where the items in the feed will be included in the search
        /// index, represented as a CLDR territory code.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; }

        /// <summary>
        /// The list of [destinations to exclude](//support.google.com/merchants/answer/6324486) for this target
        /// (corresponds to cleared check boxes in Merchant Center). Products that are excluded from all destinations
        /// for more than 7 days are automatically deleted.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("excludedDestinations")]
        public virtual System.Collections.Generic.IList<string> ExcludedDestinations { get; set; }

        /// <summary>
        /// Feed label for the DatafeedTarget. Either `country` or `feedLabel` is required. If both `feedLabel` and
        /// `country` is specified, the values must match. Must be less than or equal to 20 uppercase letters (A-Z),
        /// numbers (0-9), and dashes (-).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("feedLabel")]
        public virtual string FeedLabel { get; set; }

        /// <summary>
        /// The list of [destinations to include](//support.google.com/merchants/answer/7501026) for this target
        /// (corresponds to checked check boxes in Merchant Center). Default destinations are always included unless
        /// provided in `excludedDestinations`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("includedDestinations")]
        public virtual System.Collections.Generic.IList<string> IncludedDestinations { get; set; }

        /// <summary>
        /// The two-letter ISO 639-1 language of the items in the feed. Must be a valid language for
        /// `targets[].country`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("language")]
        public virtual string Language { get; set; }

        /// <summary>
        /// The countries where the items may be displayed. Represented as a CLDR territory code. Will be ignored for
        /// "product inventory" feeds.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetCountries")]
        public virtual System.Collections.Generic.IList<string> TargetCountries { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class DatafeedsCustomBatchRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The request entries to be processed in the batch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<DatafeedsCustomBatchRequestEntry> Entries { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A batch entry encoding a single non-batch datafeeds request.</summary>
    public class DatafeedsCustomBatchRequestEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>An entry ID, unique within the batch request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>The data feed to insert.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datafeed")]
        public virtual Datafeed Datafeed { get; set; }

        /// <summary>The ID of the data feed to get, delete or fetch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datafeedId")]
        public virtual System.Nullable<ulong> DatafeedId { get; set; }

        /// <summary>The ID of the managing account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("merchantId")]
        public virtual System.Nullable<ulong> MerchantId { get; set; }

        /// <summary>
        /// The method of the batch entry. Acceptable values are: - "`delete`" - "`fetchNow`" - "`get`" - "`insert`" -
        /// "`update`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("method")]
        public virtual string Method { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class DatafeedsCustomBatchResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The result of the execution of the batch requests.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<DatafeedsCustomBatchResponseEntry> Entries { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#datafeedsCustomBatchResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A batch entry encoding a single non-batch datafeeds response.</summary>
    public class DatafeedsCustomBatchResponseEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the request entry this entry responds to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>The requested data feed. Defined if and only if the request was successful.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datafeed")]
        public virtual Datafeed Datafeed { get; set; }

        /// <summary>
        /// A list of errors for failed custombatch entries. *Note:* Schema errors fail the whole request.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("errors")]
        public virtual Errors Errors { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class DatafeedsFetchNowResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#datafeedsFetchNowResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class DatafeedsListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#datafeedsListResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The token for the retrieval of the next page of datafeeds.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        [Newtonsoft.Json.JsonPropertyAttribute("resources")]
        public virtual System.Collections.Generic.IList<Datafeed> Resources { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class DatafeedstatusesCustomBatchRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The request entries to be processed in the batch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<DatafeedstatusesCustomBatchRequestEntry> Entries { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A batch entry encoding a single non-batch datafeedstatuses request.</summary>
    public class DatafeedstatusesCustomBatchRequestEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>An entry ID, unique within the batch request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>
        /// Deprecated. Use `feedLabel` instead. The country to get the datafeed status for. If this parameter is
        /// provided, then `language` must also be provided. Note that for multi-target datafeeds this parameter is
        /// required.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; }

        /// <summary>The ID of the data feed to get.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datafeedId")]
        public virtual System.Nullable<ulong> DatafeedId { get; set; }

        /// <summary>
        /// The feed label to get the datafeed status for. If this parameter is provided, then `language` must also be
        /// provided. Note that for multi-target datafeeds this parameter is required.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("feedLabel")]
        public virtual string FeedLabel { get; set; }

        /// <summary>
        /// The language to get the datafeed status for. If this parameter is provided then `country` must also be
        /// provided. Note that for multi-target datafeeds this parameter is required.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("language")]
        public virtual string Language { get; set; }

        /// <summary>The ID of the managing account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("merchantId")]
        public virtual System.Nullable<ulong> MerchantId { get; set; }

        /// <summary>The method of the batch entry. Acceptable values are: - "`get`" </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("method")]
        public virtual string Method { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class DatafeedstatusesCustomBatchResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The result of the execution of the batch requests.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<DatafeedstatusesCustomBatchResponseEntry> Entries { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#datafeedstatusesCustomBatchResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A batch entry encoding a single non-batch datafeedstatuses response.</summary>
    public class DatafeedstatusesCustomBatchResponseEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the request entry this entry responds to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>The requested data feed status. Defined if and only if the request was successful.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datafeedStatus")]
        public virtual DatafeedStatus DatafeedStatus { get; set; }

        /// <summary>
        /// A list of errors for failed custombatch entries. *Note:* Schema errors fail the whole request.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("errors")]
        public virtual Errors Errors { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class DatafeedstatusesListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#datafeedstatusesListResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The token for the retrieval of the next page of datafeed statuses.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        [Newtonsoft.Json.JsonPropertyAttribute("resources")]
        public virtual System.Collections.Generic.IList<DatafeedStatus> Resources { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Represents a whole or partial calendar date, such as a birthday. The time of day and time zone are either
    /// specified elsewhere or are insignificant. The date is relative to the Gregorian Calendar. This can represent one
    /// of the following: * A full date, with non-zero year, month, and day values. * A month and day, with a zero year
    /// (for example, an anniversary). * A year on its own, with a zero month and a zero day. * A year and month, with a
    /// zero day (for example, a credit card expiration date). Related types: * google.type.TimeOfDay *
    /// google.type.DateTime * google.protobuf.Timestamp
    /// </summary>
    public class Date : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to specify a year by itself or a
        /// year and month where the day isn't significant.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("day")]
        public virtual System.Nullable<int> Day { get; set; }

        /// <summary>Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("month")]
        public virtual System.Nullable<int> Month { get; set; }

        /// <summary>Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("year")]
        public virtual System.Nullable<int> Year { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Represents civil time (or occasionally physical time). This type can represent a civil time in one of a few
    /// possible ways: * When utc_offset is set and time_zone is unset: a civil time on a calendar day with a particular
    /// offset from UTC. * When time_zone is set and utc_offset is unset: a civil time on a calendar day in a particular
    /// time zone. * When neither time_zone nor utc_offset is set: a civil time on a calendar day in local time. The
    /// date is relative to the Proleptic Gregorian Calendar. If year, month, or day are 0, the DateTime is considered
    /// not to have a specific year, month, or day respectively. This type may also be used to represent a physical time
    /// if all the date and time fields are set and either case of the `time_offset` oneof is set. Consider using
    /// `Timestamp` message for physical time instead. If your use case also would like to store the user's timezone,
    /// that can be done in another field. This type is more flexible than some applications may want. Make sure to
    /// document and validate your application's limitations.
    /// </summary>
    public class DateTime : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Optional. Day of month. Must be from 1 to 31 and valid for the year and month, or 0 if specifying a datetime
        /// without a day.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("day")]
        public virtual System.Nullable<int> Day { get; set; }

        /// <summary>
        /// Optional. Hours of day in 24 hour format. Should be from 0 to 23, defaults to 0 (midnight). An API may
        /// choose to allow the value "24:00:00" for scenarios like business closing time.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hours")]
        public virtual System.Nullable<int> Hours { get; set; }

        /// <summary>Optional. Minutes of hour of day. Must be from 0 to 59, defaults to 0.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minutes")]
        public virtual System.Nullable<int> Minutes { get; set; }

        /// <summary>
        /// Optional. Month of year. Must be from 1 to 12, or 0 if specifying a datetime without a month.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("month")]
        public virtual System.Nullable<int> Month { get; set; }

        /// <summary>
        /// Optional. Fractions of seconds in nanoseconds. Must be from 0 to 999,999,999, defaults to 0.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nanos")]
        public virtual System.Nullable<int> Nanos { get; set; }

        /// <summary>
        /// Optional. Seconds of minutes of the time. Must normally be from 0 to 59, defaults to 0. An API may allow the
        /// value 60 if it allows leap-seconds.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("seconds")]
        public virtual System.Nullable<int> Seconds { get; set; }

        /// <summary>Time zone.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("timeZone")]
        public virtual TimeZone TimeZone { get; set; }

        /// <summary>
        /// UTC offset. Must be whole seconds, between -18 hours and +18 hours. For example, a UTC offset of -4:00 would
        /// be represented as { seconds: -14400 }.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("utcOffset")]
        public virtual object UtcOffset { get; set; }

        /// <summary>
        /// Optional. Year of date. Must be from 1 to 9999, or 0 if specifying a datetime without a year.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("year")]
        public virtual System.Nullable<int> Year { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A delivery area for the product. Only one of `countryCode` or `postalCodeRange` must be set.</summary>
    public class DeliveryArea : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Required. The country that the product can be delivered to. Submit a [unicode CLDR
        /// region](http://www.unicode.org/repos/cldr/tags/latest/common/main/en.xml) such as `US` or `CH`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("countryCode")]
        public virtual string CountryCode { get; set; }

        /// <summary>
        /// A postal code, postal code range or postal code prefix that defines this area. Limited to US and AUS.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("postalCodeRange")]
        public virtual DeliveryAreaPostalCodeRange PostalCodeRange { get; set; }

        /// <summary>
        /// A state, territory, or prefecture. This is supported for the United States, Australia, and Japan. Provide a
        /// subdivision code from the ISO 3166-2 code tables ([US](https://en.wikipedia.org/wiki/ISO_3166-2:US),
        /// [AU](https://en.wikipedia.org/wiki/ISO_3166-2:AU), or [JP](https://en.wikipedia.org/wiki/ISO_3166-2:JP))
        /// without country prefix (for example, `"NY"`, `"NSW"`, `"03"`).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("regionCode")]
        public virtual string RegionCode { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// A range of postal codes that defines the delivery area. Only set `firstPostalCode` when specifying a single
    /// postal code.
    /// </summary>
    public class DeliveryAreaPostalCodeRange : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Required. A postal code or a pattern of the form prefix* denoting the inclusive lower bound of the range
        /// defining the area. Examples values: `"94108"`, `"9410*"`, `"9*"`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("firstPostalCode")]
        public virtual string FirstPostalCode { get; set; }

        /// <summary>
        /// A postal code or a pattern of the form prefix* denoting the inclusive upper bound of the range defining the
        /// area (for example [070* - 078*] results in the range [07000 - 07899]). It must have the same length as
        /// `firstPostalCode`: if `firstPostalCode` is a postal code then `lastPostalCode` must be a postal code too; if
        /// firstPostalCode is a pattern then `lastPostalCode` must be a pattern with the same prefix length. Ignored if
        /// not set, then the area is defined as being all the postal codes matching `firstPostalCode`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("lastPostalCode")]
        public virtual string LastPostalCode { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class DeliveryTime : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Business days cutoff time definition. If not configured, the cutoff time will be defaulted to 8AM PST. If
        /// local delivery, use Service.StoreConfig.CutoffConfig.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cutoffTime")]
        public virtual CutoffTime CutoffTime { get; set; }

        /// <summary>
        /// The business days during which orders can be handled. If not provided, Monday to Friday business days will
        /// be assumed.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("handlingBusinessDayConfig")]
        public virtual BusinessDayConfig HandlingBusinessDayConfig { get; set; }

        /// <summary>
        /// Holiday cutoff definitions. If configured, they specify order cutoff times for holiday-specific shipping.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("holidayCutoffs")]
        public virtual System.Collections.Generic.IList<HolidayCutoff> HolidayCutoffs { get; set; }

        /// <summary>
        /// Maximum number of business days spent before an order is shipped. 0 means same day shipped, 1 means next day
        /// shipped. Must be greater than or equal to `minHandlingTimeInDays`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxHandlingTimeInDays")]
        public virtual System.Nullable<long> MaxHandlingTimeInDays { get; set; }

        /// <summary>
        /// Maximum number of business days that are spent in transit. 0 means same day delivery, 1 means next day
        /// delivery. Must be greater than or equal to `minTransitTimeInDays`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxTransitTimeInDays")]
        public virtual System.Nullable<long> MaxTransitTimeInDays { get; set; }

        /// <summary>
        /// Minimum number of business days spent before an order is shipped. 0 means same day shipped, 1 means next day
        /// shipped.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minHandlingTimeInDays")]
        public virtual System.Nullable<long> MinHandlingTimeInDays { get; set; }

        /// <summary>
        /// Minimum number of business days that are spent in transit. 0 means same day delivery, 1 means next day
        /// delivery. Either `{min,max}TransitTimeInDays` or `transitTimeTable` must be set, but not both.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minTransitTimeInDays")]
        public virtual System.Nullable<long> MinTransitTimeInDays { get; set; }

        /// <summary>
        /// The business days during which orders can be in-transit. If not provided, Monday to Friday business days
        /// will be assumed.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("transitBusinessDayConfig")]
        public virtual BusinessDayConfig TransitBusinessDayConfig { get; set; }

        /// <summary>
        /// Transit time table, number of business days spent in transit based on row and column dimensions. Either
        /// `{min,max}TransitTimeInDays` or `transitTimeTable` can be set, but not both.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("transitTimeTable")]
        public virtual TransitTable TransitTimeTable { get; set; }

        /// <summary>
        /// Indicates that the delivery time should be calculated per warehouse (shipping origin location) based on the
        /// settings of the selected carrier. When set, no other transit time related field in DeliveryTime should be
        /// set.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("warehouseBasedDeliveryTimes")]
        public virtual System.Collections.Generic.IList<WarehouseBasedDeliveryTime> WarehouseBasedDeliveryTimes { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Distance represented by an integer and unit.</summary>
    public class Distance : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The distance unit. Acceptable values are `None`, `Miles`, and `Kilometers`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("unit")]
        public virtual string Unit { get; set; }

        /// <summary>The distance represented as a number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual System.Nullable<long> Value { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Additional information required for E_COMMERCE_PLATFORM link type.</summary>
    public class ECommercePlatformLinkInfo : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The id used by the third party service provider to identify the merchant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("externalAccountId")]
        public virtual string ExternalAccountId { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>An error returned by the API.</summary>
    public class Error : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The domain of the error.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("domain")]
        public virtual string Domain { get; set; }

        /// <summary>A description of the error.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("message")]
        public virtual string Message { get; set; }

        /// <summary>The error code.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reason")]
        public virtual string Reason { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A list of errors returned by a failed batch entry.</summary>
    public class Errors : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The HTTP status of the first error in `errors`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("code")]
        public virtual System.Nullable<long> Code { get; set; }

        /// <summary>A list of errors.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("errors")]
        public virtual System.Collections.Generic.IList<Error> ErrorsValue { get; set; }

        /// <summary>The message of the first error in `errors`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("message")]
        public virtual string Message { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Action that is implemented and performed outside of the third-party application. It should redirect the merchant
    /// to the provided URL of an external system where they can perform the action. For example to request a review in
    /// the Merchant Center.
    /// </summary>
    public class ExternalAction : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The type of external action.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; }

        /// <summary>
        /// URL to external system, for example Merchant Center, where the merchant can perform the action.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("uri")]
        public virtual string Uri { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Response message for GetFreeListingsProgramStatus.</summary>
    public class FreeListingsProgramStatus : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>State of the program. `ENABLED` if there are offers for at least one region.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("globalState")]
        public virtual string GlobalState { get; set; }

        /// <summary>
        /// Status of the program in each region. Regions with the same status and review eligibility are grouped
        /// together in `regionCodes`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("regionStatuses")]
        public virtual System.Collections.Generic.IList<FreeListingsProgramStatusRegionStatus> RegionStatuses { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Status of program and region.</summary>
    public class FreeListingsProgramStatusRegionStatus : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Date by which eligibilityStatus will go from `WARNING` to `DISAPPROVED`. Only visible when your
        /// eligibilityStatus is WARNING. In [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DD`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("disapprovalDate")]
        public virtual string DisapprovalDate { get; set; }

        /// <summary>Eligibility status of the standard free listing program.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("eligibilityStatus")]
        public virtual string EligibilityStatus { get; set; }

        /// <summary>Issues that must be fixed to be eligible for review.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("onboardingIssues")]
        public virtual System.Collections.Generic.IList<string> OnboardingIssues { get; set; }

        /// <summary>
        /// The two-letter [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) codes for all the
        /// regions with the same `eligibilityStatus` and `reviewEligibility`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("regionCodes")]
        public virtual System.Collections.Generic.IList<string> RegionCodes { get; set; }

        /// <summary>
        /// If a program is eligible for review in a specific region. Only visible if `eligibilityStatus` is
        /// `DISAPPROVED`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reviewEligibilityStatus")]
        public virtual string ReviewEligibilityStatus { get; set; }

        /// <summary>Review ineligibility reason if account is not eligible for review.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reviewIneligibilityReason")]
        public virtual string ReviewIneligibilityReason { get; set; }

        /// <summary>
        /// Reason a program in a specific region isn’t eligible for review. Only visible if `reviewEligibilityStatus`
        /// is `INELIGIBLE`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reviewIneligibilityReasonDescription")]
        public virtual string ReviewIneligibilityReasonDescription { get; set; }

        /// <summary>
        /// Additional information for ineligibility. If `reviewIneligibilityReason` is `IN_COOLDOWN_PERIOD`, a
        /// timestamp for the end of the cooldown period is provided.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reviewIneligibilityReasonDetails")]
        public virtual FreeListingsProgramStatusReviewIneligibilityReasonDetails ReviewIneligibilityReasonDetails { get; set; }

        /// <summary>Issues evaluated in the review process. Fix all issues before requesting a review.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reviewIssues")]
        public virtual System.Collections.Generic.IList<string> ReviewIssues { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Additional details for review ineligibility reasons.</summary>
    public class FreeListingsProgramStatusReviewIneligibilityReasonDetails : Google.Apis.Requests.IDirectResponseSchema
    {
        private string _cooldownTimeRaw;

        private object _cooldownTime;

        /// <summary>
        /// This timestamp represents end of cooldown period for review ineligbility reason `IN_COOLDOWN_PERIOD`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cooldownTime")]
        public virtual string CooldownTimeRaw
        {
            get => _cooldownTimeRaw;
            set
            {
                _cooldownTime = Google.Apis.Util.Utilities.DeserializeForGoogleFormat(value);
                _cooldownTimeRaw = value;
            }
        }

        /// <summary><seealso cref="object"/> representation of <see cref="CooldownTimeRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnoreAttribute]
        [System.ObsoleteAttribute("This property is obsolete and may behave unexpectedly; please use CooldownTimeDateTimeOffset instead.")]
        public virtual object CooldownTime
        {
            get => _cooldownTime;
            set
            {
                _cooldownTimeRaw = Google.Apis.Util.Utilities.SerializeForGoogleFormat(value);
                _cooldownTime = value;
            }
        }

        /// <summary><seealso cref="System.DateTimeOffset"/> representation of <see cref="CooldownTimeRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnoreAttribute]
        public virtual System.DateTimeOffset? CooldownTimeDateTimeOffset
        {
            get => Google.Apis.Util.DiscoveryFormat.ParseGoogleDateTimeToDateTimeOffset(CooldownTimeRaw);
            set => CooldownTimeRaw = Google.Apis.Util.DiscoveryFormat.FormatDateTimeOffsetToGoogleDateTime(value);
        }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Conditions to be met for a product to have free shipping.</summary>
    public class FreeShippingThreshold : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Required. The [CLDR territory code](http://www.unicode.org/repos/cldr/tags/latest/common/main/en.xml) of the
        /// country to which an item will ship.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; }

        /// <summary>
        /// Required. The minimum product price for the shipping cost to become free. Represented as a number.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("priceThreshold")]
        public virtual Price PriceThreshold { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Response containing generated recommendations.</summary>
    public class GenerateRecommendationsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Recommendations generated for a request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("recommendations")]
        public virtual System.Collections.Generic.IList<Recommendation> Recommendations { get; set; }

        /// <summary>
        /// Output only. Response token is a string created for each `GenerateRecommendationsResponse`. This token
        /// doesn't expire, and is globally unique. This token must be used when reporting interactions for
        /// recommendations.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("responseToken")]
        public virtual string ResponseToken { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class GmbAccounts : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the Merchant Center account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountId")]
        public virtual System.Nullable<ulong> AccountId { get; set; }

        /// <summary>A list of Business Profiles which are available to the merchant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gmbAccounts")]
        public virtual System.Collections.Generic.IList<GmbAccountsGmbAccount> GmbAccountsValue { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class GmbAccountsGmbAccount : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The email which identifies the Business Profile.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("email")]
        public virtual string Email { get; set; }

        /// <summary>Number of listings under this account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("listingCount")]
        public virtual System.Nullable<ulong> ListingCount { get; set; }

        /// <summary>The name of the Business Profile.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        /// <summary>The type of the Business Profile (User or Business).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// "Google Analytics Link" sources can be used to get conversion data from an existing Google Analytics property
    /// into the linked Merchant Center account.
    /// </summary>
    public class GoogleAnalyticsLink : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Output only. Attribution settings for the linked Google Analytics property.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("attributionSettings")]
        public virtual AttributionSettings AttributionSettings { get; set; }

        /// <summary>Required. Immutable. ID of the Google Analytics property the merchant is linked to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("propertyId")]
        public virtual System.Nullable<long> PropertyId { get; set; }

        /// <summary>Output only. Name of the Google Analytics property the merchant is linked to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("propertyName")]
        public virtual string PropertyName { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// A non-empty list of row or column headers for a table. Exactly one of `prices`, `weights`, `numItems`,
    /// `postalCodeGroupNames`, or `location` must be set.
    /// </summary>
    public class Headers : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// A list of location ID sets. Must be non-empty. Can only be set if all other fields are not set.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("locations")]
        public virtual System.Collections.Generic.IList<LocationIdSet> Locations { get; set; }

        /// <summary>
        /// A list of inclusive number of items upper bounds. The last value can be `"infinity"`. For example `["10",
        /// "50", "infinity"]` represents the headers "&amp;lt;= 10 items", "&amp;lt;= 50 items", and "&amp;gt; 50
        /// items". Must be non-empty. Can only be set if all other fields are not set.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("numberOfItems")]
        public virtual System.Collections.Generic.IList<string> NumberOfItems { get; set; }

        /// <summary>
        /// A list of postal group names. The last value can be `"all other locations"`. Example: `["zone 1", "zone 2",
        /// "all other locations"]`. The referred postal code groups must match the delivery country of the service.
        /// Must be non-empty. Can only be set if all other fields are not set.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("postalCodeGroupNames")]
        public virtual System.Collections.Generic.IList<string> PostalCodeGroupNames { get; set; }

        /// <summary>
        /// A list of inclusive order price upper bounds. The last price's value can be `"infinity"`. For example
        /// `[{"value": "10", "currency": "USD"}, {"value": "500", "currency": "USD"}, {"value": "infinity", "currency":
        /// "USD"}]` represents the headers "&amp;lt;= $10", "&amp;lt;= $500", and "&amp;gt; $500". All prices within a
        /// service must have the same currency. Must be non-empty. Can only be set if all other fields are not set.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("prices")]
        public virtual System.Collections.Generic.IList<Price> Prices { get; set; }

        /// <summary>
        /// A list of inclusive order weight upper bounds. The last weight's value can be `"infinity"`. For example
        /// `[{"value": "10", "unit": "kg"}, {"value": "50", "unit": "kg"}, {"value": "infinity", "unit": "kg"}]`
        /// represents the headers "&amp;lt;= 10kg", "&amp;lt;= 50kg", and "&amp;gt; 50kg". All weights within a service
        /// must have the same unit. Must be non-empty. Can only be set if all other fields are not set.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("weights")]
        public virtual System.Collections.Generic.IList<Weight> Weights { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class HolidayCutoff : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Date of the order deadline, in ISO 8601 format. For example, "2016-11-29" for 29th November 2016. Required.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deadlineDate")]
        public virtual string DeadlineDate { get; set; }

        /// <summary>
        /// Hour of the day on the deadline date until which the order has to be placed to qualify for the delivery
        /// guarantee. Possible values are: 0 (midnight), 1, ..., 12 (noon), 13, ..., 23. Required.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deadlineHour")]
        public virtual System.Nullable<long> DeadlineHour { get; set; }

        /// <summary>
        /// Timezone identifier for the deadline hour (for example, "Europe/Zurich"). List of identifiers. Required.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deadlineTimezone")]
        public virtual string DeadlineTimezone { get; set; }

        /// <summary>Unique identifier for the holiday. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("holidayId")]
        public virtual string HolidayId { get; set; }

        /// <summary>
        /// Date on which the deadline will become visible to consumers in ISO 8601 format. For example, "2016-10-31"
        /// for 31st October 2016. Required.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("visibleFromDate")]
        public virtual string VisibleFromDate { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class HolidaysHoliday : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The CLDR territory code of the country in which the holiday is available. For example, "US", "DE", "GB". A
        /// holiday cutoff can only be configured in a shipping settings service with matching delivery country. Always
        /// present.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("countryCode")]
        public virtual string CountryCode { get; set; }

        /// <summary>
        /// Date of the holiday, in ISO 8601 format. For example, "2016-12-25" for Christmas 2016. Always present.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("date")]
        public virtual string Date { get; set; }

        /// <summary>
        /// Date on which the order has to arrive at the customer's, in ISO 8601 format. For example, "2016-12-24" for
        /// 24th December 2016. Always present.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deliveryGuaranteeDate")]
        public virtual string DeliveryGuaranteeDate { get; set; }

        /// <summary>
        /// Hour of the day in the delivery location's timezone on the guaranteed delivery date by which the order has
        /// to arrive at the customer's. Possible values are: 0 (midnight), 1, ..., 12 (noon), 13, ..., 23. Always
        /// present.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deliveryGuaranteeHour")]
        public virtual System.Nullable<ulong> DeliveryGuaranteeHour { get; set; }

        /// <summary>
        /// Unique identifier for the holiday to be used when configuring holiday cutoffs. Always present.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; }

        /// <summary>
        /// The holiday type. Always present. Acceptable values are: - "`Christmas`" - "`Easter`" - "`Father's Day`" -
        /// "`Halloween`" - "`Independence Day (USA)`" - "`Mother's Day`" - "`Thanksgiving`" - "`Valentine's Day`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Input field that needs to be available to the merchant. If the field is marked as required, then a value needs
    /// to be provided for a successful processing of the request.
    /// </summary>
    public class InputField : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Input field to provide a boolean value. Corresponds to the [html input
        /// type=checkbox](https://www.w3.org/TR/2012/WD-html-markup-20121025/input.checkbox.html#input.checkbox).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("checkboxInput")]
        public virtual InputFieldCheckboxInput CheckboxInput { get; set; }

        /// <summary>
        /// Input field to select one of the offered choices. Corresponds to the [html input
        /// type=radio](https://www.w3.org/TR/2012/WD-html-markup-20121025/input.radio.html#input.radio).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("choiceInput")]
        public virtual InputFieldChoiceInput ChoiceInput { get; set; }

        /// <summary>Not for display but need to be sent back for the given input field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; }

        /// <summary>Input field label. There may be more information to be shown in a tooltip.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("label")]
        public virtual TextWithTooltip Label { get; set; }

        /// <summary>
        /// Whether the field is required. The action button needs to stay disabled till values for all required fields
        /// are provided.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("required")]
        public virtual System.Nullable<bool> Required { get; set; }

        /// <summary>
        /// Input field to provide text information. Corresponds to the [html input
        /// type=text](https://www.w3.org/TR/2012/WD-html-markup-20121025/input.text.html#input.text) or [html
        /// textarea](https://www.w3.org/TR/2012/WD-html-markup-20121025/textarea.html#textarea).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("textInput")]
        public virtual InputFieldTextInput TextInput { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Checkbox input allows merchants to provide a boolean value. Corresponds to the [html input
    /// type=checkbox](https://www.w3.org/TR/2012/WD-html-markup-20121025/input.checkbox.html#input.checkbox). If
    /// merchant checks the box, the input value for the field is `true`, otherwise it is `false`. This type of input is
    /// often used as a confirmation that the merchant completed required steps before they are allowed to start the
    /// action. In such a case, the input field is marked as required and the button to trigger the action should stay
    /// disabled until the merchant checks the box.
    /// </summary>
    public class InputFieldCheckboxInput : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Choice input allows merchants to select one of the offered choices. Some choices may be linked to additional
    /// input fields that should be displayed under or next to the choice option. The value for the additional input
    /// field needs to be provided only when the specific choice is selected by the merchant. For example, additional
    /// input field can be hidden or disabled until the merchant selects the specific choice.
    /// </summary>
    public class InputFieldChoiceInput : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A list of choices. Only one option can be selected.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("options")]
        public virtual System.Collections.Generic.IList<InputFieldChoiceInputChoiceInputOption> Options { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A choice that merchant can select.</summary>
    public class InputFieldChoiceInputChoiceInputOption : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Input that should be displayed when this option is selected. The additional input will not contain a
        /// `ChoiceInput`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("additionalInput")]
        public virtual InputField AdditionalInput { get; set; }

        /// <summary>Not for display but need to be sent back for the selected choice option.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; }

        /// <summary>
        /// Short description of the choice option. There may be more information to be shown as a tooltip.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("label")]
        public virtual TextWithTooltip Label { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Text input allows merchants to provide a text value.</summary>
    public class InputFieldTextInput : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Additional info regarding the field to be displayed to merchant. For example, warning to not include
        /// personal identifiable information. There may be more information to be shown in a tooltip.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("additionalInfo")]
        public virtual TextWithTooltip AdditionalInfo { get; set; }

        /// <summary>
        /// Text to be used as the [aria-label](https://www.w3.org/TR/WCAG20-TECHS/ARIA14.html) for the input.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ariaLabel")]
        public virtual string AriaLabel { get; set; }

        /// <summary>
        /// Information about the required format. If present, it should be shown close to the input field to help
        /// merchants to provide a correct value. For example: "VAT numbers should be in a format similar to
        /// SK9999999999"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("formatInfo")]
        public virtual string FormatInfo { get; set; }

        /// <summary>Type of the text input</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Input provided by the merchant for input field.</summary>
    public class InputValue : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Value for checkbox input field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("checkboxInputValue")]
        public virtual InputValueCheckboxInputValue CheckboxInputValue { get; set; }

        /// <summary>Value for choice input field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("choiceInputValue")]
        public virtual InputValueChoiceInputValue ChoiceInputValue { get; set; }

        /// <summary>Required. Id of the corresponding input field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inputFieldId")]
        public virtual string InputFieldId { get; set; }

        /// <summary>Value for text input field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("textInputValue")]
        public virtual InputValueTextInputValue TextInputValue { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Value for checkbox input field.</summary>
    public class InputValueCheckboxInputValue : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. True if the merchant checked the box field. False otherwise.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual System.Nullable<bool> Value { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Value for choice input field.</summary>
    public class InputValueChoiceInputValue : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. Id of the option that was selected by the merchant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("choiceInputOptionId")]
        public virtual string ChoiceInputOptionId { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Value for text input field.</summary>
    public class InputValueTextInputValue : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. Text provided by the merchant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Request message for the `InsertCheckoutSettings` method.</summary>
    public class InsertCheckoutSettingsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Required. The `UrlSettings` for the request. The presence of URL settings indicates `Checkout` enrollment.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("uriSettings")]
        public virtual UrlSettings UriSettings { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Details of a monthly installment payment offering. [Learn
    /// more](https://support.google.com/merchants/answer/6324474) about installments.
    /// </summary>
    public class Installment : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The amount the buyer has to pay per month.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("amount")]
        public virtual Price Amount { get; set; }

        /// <summary>Optional. Type of installment payments. Supported values are: - "`finance`" - "`lease`" </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("creditType")]
        public virtual string CreditType { get; set; }

        /// <summary>Optional. The initial down payment amount the buyer has to pay.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("downpayment")]
        public virtual Price Downpayment { get; set; }

        /// <summary>The number of installments the buyer has to pay.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("months")]
        public virtual System.Nullable<long> Months { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The IDs of labels that should be assigned to the CSS domain.</summary>
    public class LabelIds : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The list of label IDs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("labelIds")]
        public virtual System.Collections.Generic.IList<System.Nullable<long>> LabelIdsValue { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LiaAboutPageSettings : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The status of the verification process for the About page. Supported values are: - "`active`" - "`inactive`"
        /// - "`pending`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; }

        /// <summary>The URL for the About page.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("url")]
        public virtual string Url { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LiaCountrySettings : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The settings for the About page.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("about")]
        public virtual LiaAboutPageSettings About { get; set; }

        /// <summary>Required. CLDR country code (for example, "US").</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; }

        /// <summary>The status of the "Merchant hosted local storefront" feature.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hostedLocalStorefrontActive")]
        public virtual System.Nullable<bool> HostedLocalStorefrontActive { get; set; }

        /// <summary>LIA inventory verification settings.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inventory")]
        public virtual LiaInventorySettings Inventory { get; set; }

        /// <summary>The omnichannel experience configured for this country.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("omnichannelExperience")]
        public virtual LiaOmnichannelExperience OmnichannelExperience { get; set; }

        /// <summary>LIA "On Display To Order" settings.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("onDisplayToOrder")]
        public virtual LiaOnDisplayToOrderSettings OnDisplayToOrder { get; set; }

        /// <summary>The POS data provider linked with this country.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("posDataProvider")]
        public virtual LiaPosDataProvider PosDataProvider { get; set; }

        /// <summary>The status of the "Store pickup" feature.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storePickupActive")]
        public virtual System.Nullable<bool> StorePickupActive { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LiaInventorySettings : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The email of the contact for the inventory verification process.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inventoryVerificationContactEmail")]
        public virtual string InventoryVerificationContactEmail { get; set; }

        /// <summary>The name of the contact for the inventory verification process.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inventoryVerificationContactName")]
        public virtual string InventoryVerificationContactName { get; set; }

        /// <summary>
        /// The status of the verification contact. Acceptable values are: - "`active`" - "`inactive`" - "`pending`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inventoryVerificationContactStatus")]
        public virtual string InventoryVerificationContactStatus { get; set; }

        /// <summary>
        /// The status of the inventory verification process. Acceptable values are: - "`active`" - "`inactive`" -
        /// "`pending`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Omnichannel experience details.</summary>
    public class LiaOmnichannelExperience : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The CLDR country code (for example, "US").</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; }

        /// <summary>
        /// The Local Store Front (LSF) type for this country. Acceptable values are: - "`ghlsf`" (Google-Hosted Local
        /// Store Front) - "`mhlsfBasic`" (Merchant-Hosted Local Store Front Basic) - "`mhlsfFull`" (Merchant-Hosted
        /// Local Store Front Full) More details about these types can be found here.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("lsfType")]
        public virtual string LsfType { get; set; }

        /// <summary>
        /// The Pickup types for this country. Acceptable values are: - "`pickupToday`" - "`pickupLater`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pickupTypes")]
        public virtual System.Collections.Generic.IList<string> PickupTypes { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LiaOnDisplayToOrderSettings : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Shipping cost and policy URL.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippingCostPolicyUrl")]
        public virtual string ShippingCostPolicyUrl { get; set; }

        /// <summary>
        /// The status of the ?On display to order? feature. Acceptable values are: - "`active`" - "`inactive`" -
        /// "`pending`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LiaPosDataProvider : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the POS data provider.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("posDataProviderId")]
        public virtual System.Nullable<ulong> PosDataProviderId { get; set; }

        /// <summary>The account ID by which this merchant is known to the POS data provider.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("posExternalAccountId")]
        public virtual string PosExternalAccountId { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Local Inventory ads (LIA) settings. All methods except listposdataproviders require the admin role.
    /// </summary>
    public class LiaSettings : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The ID of the account to which these LIA settings belong. Ignored upon update, always present in get request
        /// responses.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountId")]
        public virtual System.Nullable<ulong> AccountId { get; set; }

        /// <summary>The LIA settings for each country.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("countrySettings")]
        public virtual System.Collections.Generic.IList<LiaCountrySettings> CountrySettings { get; set; }

        /// <summary>Identifies what kind of resource this is. Value: the fixed string "`content#liaSettings`"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LiasettingsCustomBatchRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The request entries to be processed in the batch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<LiasettingsCustomBatchRequestEntry> Entries { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LiasettingsCustomBatchRequestEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the account for which to get/update account LIA settings.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountId")]
        public virtual System.Nullable<ulong> AccountId { get; set; }

        /// <summary>An entry ID, unique within the batch request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>Inventory validation contact email. Required only for SetInventoryValidationContact.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contactEmail")]
        public virtual string ContactEmail { get; set; }

        /// <summary>Inventory validation contact name. Required only for SetInventoryValidationContact.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contactName")]
        public virtual string ContactName { get; set; }

        /// <summary>The country code. Required only for RequestInventoryVerification.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; }

        /// <summary>The Business Profile. Required only for RequestGmbAccess.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gmbEmail")]
        public virtual string GmbEmail { get; set; }

        /// <summary>The account Lia settings to update. Only defined if the method is `update`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("liaSettings")]
        public virtual LiaSettings LiaSettings { get; set; }

        /// <summary>The ID of the managing account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("merchantId")]
        public virtual System.Nullable<ulong> MerchantId { get; set; }

        /// <summary>
        /// The method of the batch entry. Acceptable values are: - "`get`" - "`getAccessibleGmbAccounts`" -
        /// "`requestGmbAccess`" - "`requestInventoryVerification`" - "`setInventoryVerificationContact`" - "`update`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("method")]
        public virtual string Method { get; set; }

        /// <summary>The omnichannel experience for a country. Required only for SetOmnichannelExperience.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("omnichannelExperience")]
        public virtual LiaOmnichannelExperience OmnichannelExperience { get; set; }

        /// <summary>The ID of POS data provider. Required only for SetPosProvider.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("posDataProviderId")]
        public virtual System.Nullable<ulong> PosDataProviderId { get; set; }

        /// <summary>The account ID by which this merchant is known to the POS provider.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("posExternalAccountId")]
        public virtual string PosExternalAccountId { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LiasettingsCustomBatchResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The result of the execution of the batch requests.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<LiasettingsCustomBatchResponseEntry> Entries { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#liasettingsCustomBatchResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LiasettingsCustomBatchResponseEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the request entry to which this entry responds.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>A list of errors defined if, and only if, the request failed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("errors")]
        public virtual Errors Errors { get; set; }

        /// <summary>The list of accessible Business Profiles.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gmbAccounts")]
        public virtual GmbAccounts GmbAccounts { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#liasettingsCustomBatchResponseEntry`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The retrieved or updated Lia settings.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("liaSettings")]
        public virtual LiaSettings LiaSettings { get; set; }

        /// <summary>The updated omnichannel experience for a country.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("omnichannelExperience")]
        public virtual LiaOmnichannelExperience OmnichannelExperience { get; set; }

        /// <summary>The list of POS data providers.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("posDataProviders")]
        public virtual System.Collections.Generic.IList<PosDataProviders> PosDataProviders { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LiasettingsGetAccessibleGmbAccountsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the Merchant Center account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountId")]
        public virtual System.Nullable<ulong> AccountId { get; set; }

        /// <summary>A list of Business Profiles which are available to the merchant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gmbAccounts")]
        public virtual System.Collections.Generic.IList<GmbAccountsGmbAccount> GmbAccounts { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#liasettingsGetAccessibleGmbAccountsResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LiasettingsListPosDataProvidersResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#liasettingsListPosDataProvidersResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The list of POS data providers for each eligible country</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("posDataProviders")]
        public virtual System.Collections.Generic.IList<PosDataProviders> PosDataProviders { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LiasettingsListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#liasettingsListResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The token for the retrieval of the next page of LIA settings.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        [Newtonsoft.Json.JsonPropertyAttribute("resources")]
        public virtual System.Collections.Generic.IList<LiaSettings> Resources { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LiasettingsRequestGmbAccessResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#liasettingsRequestGmbAccessResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LiasettingsRequestInventoryVerificationResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#liasettingsRequestInventoryVerificationResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LiasettingsSetInventoryVerificationContactResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#liasettingsSetInventoryVerificationContactResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LiasettingsSetPosDataProviderResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#liasettingsSetPosDataProviderResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LinkService : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Service provided to or by the linked account. Acceptable values are: - "`shoppingActionsOrderManagement`" -
        /// "`shoppingActionsProductManagement`" - "`shoppingAdsProductManagement`" - "`paymentProcessing`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("service")]
        public virtual string Service { get; set; }

        /// <summary>Status of the link Acceptable values are: - "`active`" - "`inactive`" - "`pending`" </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LinkedAccount : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the linked account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("linkedAccountId")]
        public virtual string LinkedAccountId { get; set; }

        /// <summary>List of provided services.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("services")]
        public virtual System.Collections.Generic.IList<LinkService> Services { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Response message for the `ListAccountLabels` method.</summary>
    public class ListAccountLabelsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The labels from the specified account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountLabels")]
        public virtual System.Collections.Generic.IList<AccountLabel> AccountLabels { get; set; }

        /// <summary>
        /// A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no
        /// subsequent pages.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Response for listing account return carriers.</summary>
    public class ListAccountReturnCarrierResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>List of all available account return carriers for the merchant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountReturnCarriers")]
        public virtual System.Collections.Generic.IList<AccountReturnCarrier> AccountReturnCarriers { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Response message for the ListCollectionStatuses method.</summary>
    public class ListCollectionStatusesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no
        /// subsequent pages.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        /// <summary>The collectionstatuses listed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("resources")]
        public virtual System.Collections.Generic.IList<CollectionStatus> Resources { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Response message for the ListCollections method.</summary>
    public class ListCollectionsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no
        /// subsequent pages.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        /// <summary>The collections listed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("resources")]
        public virtual System.Collections.Generic.IList<Collection> Resources { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Response message for the ListConversionSources method.</summary>
    public class ListConversionSourcesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>List of conversion sources.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("conversionSources")]
        public virtual System.Collections.Generic.IList<ConversionSource> ConversionSources { get; set; }

        /// <summary>Token to be used to fetch the next results page.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The response message for the `ListCsses` method</summary>
    public class ListCssesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The CSS domains affiliated with the specified CSS group.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("csses")]
        public virtual System.Collections.Generic.IList<Css> Csses { get; set; }

        /// <summary>
        /// A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no
        /// subsequent pages.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Response message for the ListMethodQuotas method.</summary>
    public class ListMethodQuotasResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The current quota usage and limits per each method.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("methodQuotas")]
        public virtual System.Collections.Generic.IList<MethodQuota> MethodQuotas { get; set; }

        /// <summary>
        /// A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no
        /// subsequent pages.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Response message for Promotions.List method.</summary>
    public class ListPromotionResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no
        /// subsequent pages.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        /// <summary>List of all available promotions for the merchant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("promotions")]
        public virtual System.Collections.Generic.IList<Promotion> Promotions { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Response message for the `ListRegions` method.</summary>
    public class ListRegionsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no
        /// subsequent pages.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        /// <summary>The regions from the specified merchant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("regions")]
        public virtual System.Collections.Generic.IList<Region> Regions { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Response message for the `ListReturnPolicyOnline` method.</summary>
    public class ListReturnPolicyOnlineResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The retrieved return policies.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("returnPolicies")]
        public virtual System.Collections.Generic.IList<ReturnPolicyOnline> ReturnPolicies { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Local inventory resource. For accepted attribute values, see the local product inventory feed specification.
    /// </summary>
    public class LocalInventory : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The availability of the product. For accepted attribute values, see the local product inventory feed
        /// specification.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("availability")]
        public virtual string Availability { get; set; }

        /// <summary>
        /// A list of custom (merchant-provided) attributes. Can also be used to submit any attribute of the feed
        /// specification in its generic form, for example, `{ "name": "size type", "value": "regular" }`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customAttributes")]
        public virtual System.Collections.Generic.IList<CustomAttribute> CustomAttributes { get; set; }

        /// <summary>The in-store product location.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("instoreProductLocation")]
        public virtual string InstoreProductLocation { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#localInventory`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>
        /// The supported pickup method for this offer. Unless the value is "not supported", this field must be
        /// submitted together with `pickupSla`. For accepted attribute values, see the local product inventory feed
        /// specification.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pickupMethod")]
        public virtual string PickupMethod { get; set; }

        /// <summary>
        /// The expected date that an order will be ready for pickup relative to the order date. Must be submitted
        /// together with `pickupMethod`. For accepted attribute values, see the local product inventory feed
        /// specification.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pickupSla")]
        public virtual string PickupSla { get; set; }

        /// <summary>The price of the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("price")]
        public virtual Price Price { get; set; }

        /// <summary>The quantity of the product. Must be nonnegative.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("quantity")]
        public virtual System.Nullable<long> Quantity { get; set; }

        /// <summary>The sale price of the product. Mandatory if `sale_price_effective_date` is defined.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("salePrice")]
        public virtual Price SalePrice { get; set; }

        /// <summary>
        /// A date range represented by a pair of ISO 8601 dates separated by a space, comma, or slash. Both dates may
        /// be specified as 'null' if undecided.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("salePriceEffectiveDate")]
        public virtual string SalePriceEffectiveDate { get; set; }

        /// <summary>Required. The store code of this local inventory resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeCode")]
        public virtual string StoreCode { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LocalinventoryCustomBatchRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The request entries to be processed in the batch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<LocalinventoryCustomBatchRequestEntry> Entries { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Batch entry encoding a single local inventory update request.</summary>
    public class LocalinventoryCustomBatchRequestEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>An entry ID, unique within the batch request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>Local inventory of the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("localInventory")]
        public virtual LocalInventory LocalInventory { get; set; }

        /// <summary>The ID of the managing account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("merchantId")]
        public virtual System.Nullable<ulong> MerchantId { get; set; }

        /// <summary>Method of the batch request entry. Acceptable values are: - "`insert`" </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("method")]
        public virtual string Method { get; set; }

        /// <summary>The ID of the product for which to update local inventory.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productId")]
        public virtual string ProductId { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LocalinventoryCustomBatchResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The result of the execution of the batch requests.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<LocalinventoryCustomBatchResponseEntry> Entries { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#localinventoryCustomBatchResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Batch entry encoding a single local inventory update response.</summary>
    public class LocalinventoryCustomBatchResponseEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the request entry this entry responds to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>
        /// A list of errors for failed custombatch entries. *Note:* Schema errors fail the whole request.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("errors")]
        public virtual Errors Errors { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#localinventoryCustomBatchResponseEntry`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class LocationIdSet : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// A non-empty list of location IDs. They must all be of the same location type (for example, state).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("locationIds")]
        public virtual System.Collections.Generic.IList<string> LocationIds { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Allows the setting up of loyalty program benefits (for example price or points).
    /// https://support.google.com/merchants/answer/12922446
    /// </summary>
    public class LoyaltyProgram : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Optional. The cashback that can be used for future purchases.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cashbackForFutureUse")]
        public virtual Price CashbackForFutureUse { get; set; }

        /// <summary>Optional. The amount of loyalty points earned on a purchase.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("loyaltyPoints")]
        public virtual System.Nullable<long> LoyaltyPoints { get; set; }

        /// <summary>
        /// Optional. A date range during which the item is eligible for member price. If not specified, the member
        /// price is always applicable. The date range is represented by a pair of ISO 8601 dates separated by a space,
        /// comma, or slash.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("memberPriceEffectiveDate")]
        public virtual string MemberPriceEffectiveDate { get; set; }

        /// <summary>
        /// Optional. The price for members of the given tier (instant discount price). Must be smaller or equal to the
        /// regular price.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("price")]
        public virtual Price Price { get; set; }

        /// <summary>
        /// Required. The label of the loyalty program. This is an internal label that uniquely identifies the
        /// relationship between a merchant entity and a loyalty program entity. It must be provided so that system can
        /// associate the assets below (for example, price and points) with a merchant. The corresponding program must
        /// be linked to the merchant account.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("programLabel")]
        public virtual string ProgramLabel { get; set; }

        /// <summary>
        /// Optional. The shipping label for the loyalty program. You can use this label to indicate whether this offer
        /// has the loyalty shipping benefit. If not specified, the item is not eligible for loyalty shipping for the
        /// given loyalty tier.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippingLabel")]
        public virtual string ShippingLabel { get; set; }

        /// <summary>
        /// Required. The label of the tier within the loyalty program. Must match one of the labels within the program.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("tierLabel")]
        public virtual string TierLabel { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// "Merchant Center Destination" sources can be used to send conversion events from a website using a Google tag
    /// directly to a Merchant Center account where the source is created.
    /// </summary>
    public class MerchantCenterDestination : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. Attribution settings being used for the Merchant Center Destination.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("attributionSettings")]
        public virtual AttributionSettings AttributionSettings { get; set; }

        /// <summary>
        /// Required. Three-letter currency code (ISO 4217). The currency code defines in which currency the conversions
        /// sent to this destination will be reported in Merchant Center.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("currencyCode")]
        public virtual string CurrencyCode { get; set; }

        /// <summary>Output only. Merchant Center Destination ID.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("destinationId")]
        public virtual string DestinationId { get; set; }

        /// <summary>
        /// Required. Merchant-specified display name for the destination. This is the name that identifies the
        /// conversion source within the Merchant Center UI. Limited to 64 characters.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The quota information per method in the Content API.</summary>
    public class MethodQuota : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Output only. The method name, for example `products.list`. Method name does not contain version because
        /// quota can be shared between different API versions of the same method.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("method")]
        public virtual string Method { get; set; }

        /// <summary>Output only. The maximum number of calls allowed per day for the method.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("quotaLimit")]
        public virtual System.Nullable<long> QuotaLimit { get; set; }

        /// <summary>Output only. The maximum number of calls allowed per minute for the method.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("quotaMinuteLimit")]
        public virtual System.Nullable<long> QuotaMinuteLimit { get; set; }

        /// <summary>
        /// Output only. The current quota usage, meaning the number of calls already made to the method per day. Usage
        /// is reset every day at 12 PM midday UTC.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("quotaUsage")]
        public virtual System.Nullable<long> QuotaUsage { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Performance metrics. Values are only set for metrics requested explicitly in the request's search query.
    /// </summary>
    public class Metrics : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// *Deprecated*: This field is no longer supported and retrieving it returns 0 starting from May 2024. Average
        /// order size - the average number of items in an order. **This metric cannot be segmented by product
        /// dimensions and customer_country_code.**
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("aos")]
        public virtual System.Nullable<double> Aos { get; set; }

        /// <summary>
        /// *Deprecated*: This field is no longer supported and retrieving it returns 0 starting from May 2024. Average
        /// order value in micros (1 millionth of a standard unit, 1 USD = 1000000 micros) - the average value (total
        /// price of items) of all placed orders. The currency of the returned value is stored in the currency_code
        /// segment. If this metric is selected, 'segments.currency_code' is automatically added to the SELECT clause in
        /// the search query (unless it is explicitly selected by the user) and the currency_code segment is populated
        /// in the response. **This metric cannot be segmented by product dimensions and customer_country_code.**
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("aovMicros")]
        public virtual System.Nullable<double> AovMicros { get; set; }

        /// <summary>Number of clicks.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("clicks")]
        public virtual System.Nullable<long> Clicks { get; set; }

        /// <summary>
        /// Number of conversions divided by the number of clicks, reported on the impression date. The metric is
        /// currently available only for the `FREE_PRODUCT_LISTING` program.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("conversionRate")]
        public virtual System.Nullable<double> ConversionRate { get; set; }

        /// <summary>
        /// Value of conversions in micros (1 millionth of a standard unit, 1 USD = 1000000 micros) attributed to the
        /// product, reported on the conversion date. The metric is currently available only for the
        /// `FREE_PRODUCT_LISTING` program. The currency of the returned value is stored in the currency_code segment.
        /// If this metric is selected, 'segments.currency_code' is automatically added to the SELECT clause in the
        /// search query (unless it is explicitly selected by the user) and the currency_code segment is populated in
        /// the response.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("conversionValueMicros")]
        public virtual System.Nullable<long> ConversionValueMicros { get; set; }

        /// <summary>
        /// Number of conversions attributed to the product, reported on the conversion date. Depending on the
        /// attribution model, a conversion might be distributed across multiple clicks, where each click gets its own
        /// credit assigned. This metric is a sum of all such credits. The metric is currently available only for the
        /// `FREE_PRODUCT_LISTING` program.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("conversions")]
        public virtual System.Nullable<double> Conversions { get; set; }

        /// <summary>
        /// Click-through rate - the number of clicks merchant's products receive (clicks) divided by the number of
        /// times the products are shown (impressions).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ctr")]
        public virtual System.Nullable<double> Ctr { get; set; }

        /// <summary>
        /// *Deprecated*: This field is no longer supported and retrieving it returns 0 starting from May 2024. Average
        /// number of days between an order being placed and the order being fully shipped, reported on the last
        /// shipment date. **This metric cannot be segmented by product dimensions and customer_country_code.**
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("daysToShip")]
        public virtual System.Nullable<double> DaysToShip { get; set; }

        /// <summary>Number of times merchant's products are shown.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("impressions")]
        public virtual System.Nullable<long> Impressions { get; set; }

        /// <summary>
        /// *Deprecated*: This field is no longer supported and retrieving it returns 0 starting from May 2024. Average
        /// number of days between an item being ordered and the item being **This metric cannot be segmented by
        /// customer_country_code.**
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemDaysToShip")]
        public virtual System.Nullable<double> ItemDaysToShip { get; set; }

        /// <summary>
        /// *Deprecated*: This field is no longer supported and retrieving it returns 0 starting from May 2024.
        /// Percentage of shipped items in relation to all finalized items (shipped or rejected by the merchant;
        /// unshipped items are not taken into account), reported on the order date. Item fill rate is lowered by
        /// merchant rejections. **This metric cannot be segmented by customer_country_code.**
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemFillRate")]
        public virtual System.Nullable<double> ItemFillRate { get; set; }

        /// <summary>
        /// *Deprecated*: This field is no longer supported and retrieving it returns 0 starting from May 2024. Total
        /// price of ordered items in micros (1 millionth of a standard unit, 1 USD = 1000000 micros). Excludes
        /// shipping, taxes (US only), and customer cancellations that happened within 30 minutes of placing the order.
        /// The currency of the returned value is stored in the currency_code segment. If this metric is selected,
        /// 'segments.currency_code' is automatically added to the SELECT clause in the search query (unless it is
        /// explicitly selected by the user) and the currency_code segment is populated in the response. **This metric
        /// cannot be segmented by customer_country_code.**
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("orderedItemSalesMicros")]
        public virtual System.Nullable<long> OrderedItemSalesMicros { get; set; }

        /// <summary>
        /// *Deprecated*: This field is no longer supported and retrieving it returns 0 starting from May 2024. Number
        /// of ordered items. Excludes customer cancellations that happened within 30 minutes of placing the order.
        /// **This metric cannot be segmented by customer_country_code.**
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("orderedItems")]
        public virtual System.Nullable<long> OrderedItems { get; set; }

        /// <summary>
        /// *Deprecated*: This field is no longer supported and retrieving it returns 0 starting from May 2024. Number
        /// of placed orders. Excludes customer cancellations that happened within 30 minutes of placing the order.
        /// **This metric cannot be segmented by product dimensions and customer_country_code.**
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("orders")]
        public virtual System.Nullable<long> Orders { get; set; }

        /// <summary>
        /// *Deprecated*: This field is no longer supported and retrieving it returns 0 starting from May 2024. Number
        /// of ordered items canceled by the merchant, reported on the order date. **This metric cannot be segmented by
        /// customer_country_code.**
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rejectedItems")]
        public virtual System.Nullable<long> RejectedItems { get; set; }

        /// <summary>
        /// *Deprecated*: This field is no longer supported and retrieving it returns 0 starting from May 2024. Total
        /// price of returned items divided by the total price of shipped items, reported on the order date. If this
        /// metric is selected, 'segments.currency_code' is automatically added to the SELECT clause in the search query
        /// (unless it is explicitly selected by the user) and the currency_code segment is populated in the response.
        /// **This metric cannot be segmented by customer_country_code.**
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("returnRate")]
        public virtual System.Nullable<double> ReturnRate { get; set; }

        /// <summary>
        /// *Deprecated*: This field is no longer supported and retrieving it returns 0 starting from May 2024. Number
        /// of ordered items sent back for return, reported on the date when the merchant accepted the return. **This
        /// metric cannot be segmented by customer_country_code.**
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("returnedItems")]
        public virtual System.Nullable<long> ReturnedItems { get; set; }

        /// <summary>
        /// *Deprecated*: This field is no longer supported and retrieving it returns 0 starting from May 2024. Total
        /// price of ordered items sent back for return in micros (1 millionth of a standard unit, 1 USD = 1000000
        /// micros), reported on the date when the merchant accepted the return. The currency of the returned value is
        /// stored in the currency_code segment. If this metric is selected, 'segments.currency_code' is automatically
        /// added to the SELECT clause in the search query (unless it is explicitly selected by the user) and the
        /// currency_code segment is populated in the response. **This metric cannot be segmented by
        /// customer_country_code.**
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("returnsMicros")]
        public virtual System.Nullable<long> ReturnsMicros { get; set; }

        /// <summary>
        /// *Deprecated*: This field is no longer supported and retrieving it returns 0 starting from May 2024. Total
        /// price of shipped items in micros (1 millionth of a standard unit, 1 USD = 1000000 micros), reported on the
        /// order date. Excludes shipping and taxes (US only). The currency of the returned value is stored in the
        /// currency_code segment. If this metric is selected, 'segments.currency_code' is automatically added to the
        /// SELECT clause in the search query (unless it is explicitly selected by the user) and the currency_code
        /// segment is populated in the response. **This metric cannot be segmented by customer_country_code.**
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippedItemSalesMicros")]
        public virtual System.Nullable<long> ShippedItemSalesMicros { get; set; }

        /// <summary>
        /// *Deprecated*: This field is no longer supported and retrieving it returns 0 starting from May 2024. Number
        /// of shipped items, reported on the shipment date. **This metric cannot be segmented by
        /// customer_country_code.**
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippedItems")]
        public virtual System.Nullable<long> ShippedItems { get; set; }

        /// <summary>
        /// *Deprecated*: This field is no longer supported and retrieving it returns 0 starting from May 2024. Number
        /// of fully shipped orders, reported on the last shipment date. **This metric cannot be segmented by product
        /// dimensions and customer_country_code.**
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippedOrders")]
        public virtual System.Nullable<long> ShippedOrders { get; set; }

        /// <summary>
        /// *Deprecated*: This field is no longer supported and retrieving it returns 0 starting from May 2024. Number
        /// of ordered items not shipped up until the end of the queried day. If a multi-day period is specified in the
        /// search query, the returned value is the average number of unshipped items over the days in the queried
        /// period. **This metric cannot be segmented by customer_country_code.**
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("unshippedItems")]
        public virtual System.Nullable<double> UnshippedItems { get; set; }

        /// <summary>
        /// *Deprecated*: This field is no longer supported and retrieving it returns 0 starting from May 2024. Number
        /// of orders not shipped or partially shipped up until the end of the queried day. If a multi-day period is
        /// specified in the search query, the returned value is the average number of unshipped orders over the days in
        /// the queried period. **This metric cannot be segmented by product dimensions and customer_country_code.**
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("unshippedOrders")]
        public virtual System.Nullable<double> UnshippedOrders { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class MinimumOrderValueTable : Google.Apis.Requests.IDirectResponseSchema
    {
        [Newtonsoft.Json.JsonPropertyAttribute("storeCodeSetWithMovs")]
        public virtual System.Collections.Generic.IList<MinimumOrderValueTableStoreCodeSetWithMov> StoreCodeSetWithMovs { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// A list of store code sets sharing the same minimum order value. At least two sets are required and the last one
    /// must be empty, which signifies 'MOV for all other stores'. Each store code can only appear once across all the
    /// sets. All prices within a service must have the same currency.
    /// </summary>
    public class MinimumOrderValueTableStoreCodeSetWithMov : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A list of unique store codes or empty for the catch all.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeCodes")]
        public virtual System.Collections.Generic.IList<string> StoreCodes { get; set; }

        /// <summary>The minimum order value for the given stores.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual Price Value { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Represents a merchant trade from which signals are extracted, e.g. shipping.</summary>
    public class OrderTrackingSignal : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The shipping fee of the order; this value should be set to zero in the case of free shipping.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customerShippingFee")]
        public virtual PriceAmount CustomerShippingFee { get; set; }

        /// <summary>
        /// Required. The delivery postal code, as a continuous string without spaces or dashes, e.g. "95016". This
        /// field will be anonymized in returned OrderTrackingSignal creation response.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deliveryPostalCode")]
        public virtual string DeliveryPostalCode { get; set; }

        /// <summary>
        /// Required. The [CLDR territory code] (http://www.unicode.org/repos/cldr/tags/latest/common/main/en.xml) for
        /// the shipping destination.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deliveryRegionCode")]
        public virtual string DeliveryRegionCode { get; set; }

        /// <summary>Information about line items in the order.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("lineItems")]
        public virtual System.Collections.Generic.IList<OrderTrackingSignalLineItemDetails> LineItems { get; set; }

        /// <summary>
        /// The Google merchant ID of this order tracking signal. This value is optional. If left unset, the caller's
        /// merchant ID is used. You must request access in order to provide data on behalf of another merchant. For
        /// more information, see [Submitting Order Tracking Signals](/shopping-content/guides/order-tracking-signals).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("merchantId")]
        public virtual System.Nullable<long> MerchantId { get; set; }

        /// <summary>
        /// Required. The time when the order was created on the merchant side. Include the year and timezone string, if
        /// available.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("orderCreatedTime")]
        public virtual DateTime OrderCreatedTime { get; set; }

        /// <summary>
        /// Required. The ID of the order on the merchant side. This field will be hashed in returned
        /// OrderTrackingSignal creation response.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("orderId")]
        public virtual string OrderId { get; set; }

        /// <summary>Output only. The ID that uniquely identifies this order tracking signal.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("orderTrackingSignalId")]
        public virtual System.Nullable<long> OrderTrackingSignalId { get; set; }

        /// <summary>The mapping of the line items to the shipment information.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shipmentLineItemMapping")]
        public virtual System.Collections.Generic.IList<OrderTrackingSignalShipmentLineItemMapping> ShipmentLineItemMapping { get; set; }

        /// <summary>The shipping information for the order.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippingInfo")]
        public virtual System.Collections.Generic.IList<OrderTrackingSignalShippingInfo> ShippingInfo { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The line items of the order.</summary>
    public class OrderTrackingSignalLineItemDetails : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Brand of the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("brand")]
        public virtual string Brand { get; set; }

        /// <summary>The Global Trade Item Number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gtin")]
        public virtual string Gtin { get; set; }

        /// <summary>Required. The ID for this line item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("lineItemId")]
        public virtual string LineItemId { get; set; }

        /// <summary>The manufacturer part number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("mpn")]
        public virtual string Mpn { get; set; }

        /// <summary>Plain text description of this product (deprecated: Please use product_title instead).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productDescription")]
        public virtual string ProductDescription { get; set; }

        /// <summary>
        /// Required. The Content API REST ID of the product, in the form channel:contentLanguage:targetCountry:offerId.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productId")]
        public virtual string ProductId { get; set; }

        /// <summary>Plain text title of this product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productTitle")]
        public virtual string ProductTitle { get; set; }

        /// <summary>The quantity of the line item in the order.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("quantity")]
        public virtual System.Nullable<long> Quantity { get; set; }

        /// <summary>Merchant SKU for this item (deprecated).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sku")]
        public virtual string Sku { get; set; }

        /// <summary>Universal product code for this item (deprecated: Please use GTIN instead).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("upc")]
        public virtual string Upc { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Represents how many items are in the shipment for the given shipment_id and line_item_id.</summary>
    public class OrderTrackingSignalShipmentLineItemMapping : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The line item ID.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("lineItemId")]
        public virtual string LineItemId { get; set; }

        /// <summary>The line item quantity in the shipment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("quantity")]
        public virtual System.Nullable<long> Quantity { get; set; }

        /// <summary>
        /// Required. The shipment ID. This field will be hashed in returned OrderTrackingSignal creation response.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shipmentId")]
        public virtual string ShipmentId { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The shipping information for the order.</summary>
    public class OrderTrackingSignalShippingInfo : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The time when the shipment was actually delivered. Include the year and timezone string, if available. This
        /// field is required, if one of the following fields is absent: tracking_id or carrier_name.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("actualDeliveryTime")]
        public virtual DateTime ActualDeliveryTime { get; set; }

        /// <summary>
        /// The name of the shipping carrier for the delivery. This field is required if one of the following fields is
        /// absent: earliest_delivery_promise_time, latest_delivery_promise_time, and actual_delivery_time.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("carrierName")]
        public virtual string CarrierName { get; set; }

        /// <summary>The service type for fulfillment, e.g., GROUND, FIRST_CLASS, etc.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("carrierServiceName")]
        public virtual string CarrierServiceName { get; set; }

        /// <summary>
        /// The earliest delivery promised time. Include the year and timezone string, if available. This field is
        /// required, if one of the following fields is absent: tracking_id or carrier_name.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("earliestDeliveryPromiseTime")]
        public virtual DateTime EarliestDeliveryPromiseTime { get; set; }

        /// <summary>
        /// The latest delivery promised time. Include the year and timezone string, if available. This field is
        /// required, if one of the following fields is absent: tracking_id or carrier_name.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("latestDeliveryPromiseTime")]
        public virtual DateTime LatestDeliveryPromiseTime { get; set; }

        /// <summary>
        /// The origin postal code, as a continuous string without spaces or dashes, e.g. "95016". This field will be
        /// anonymized in returned OrderTrackingSignal creation response.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("originPostalCode")]
        public virtual string OriginPostalCode { get; set; }

        /// <summary>
        /// The [CLDR territory code] (http://www.unicode.org/repos/cldr/tags/latest/common/main/en.xml) for the
        /// shipping origin.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("originRegionCode")]
        public virtual string OriginRegionCode { get; set; }

        /// <summary>
        /// Required. The shipment ID. This field will be hashed in returned OrderTrackingSignal creation response.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shipmentId")]
        public virtual string ShipmentId { get; set; }

        /// <summary>
        /// The time when the shipment was shipped. Include the year and timezone string, if available.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippedTime")]
        public virtual DateTime ShippedTime { get; set; }

        /// <summary>The status of the shipment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippingStatus")]
        public virtual string ShippingStatus { get; set; }

        /// <summary>
        /// The tracking ID of the shipment. This field is required if one of the following fields is absent:
        /// earliest_delivery_promise_time, latest_delivery_promise_time, and actual_delivery_time.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("trackingId")]
        public virtual string TrackingId { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Additional information required for PAYMENT_SERVICE_PROVIDER link type.</summary>
    public class PaymentServiceProviderLinkInfo : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The business country of the merchant account as identified by the third party service provider.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("externalAccountBusinessCountry")]
        public virtual string ExternalAccountBusinessCountry { get; set; }

        /// <summary>The id used by the third party service provider to identify the merchant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("externalAccountId")]
        public virtual string ExternalAccountId { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class PickupCarrierService : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The name of the pickup carrier (for example, `"UPS"`). Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("carrierName")]
        public virtual string CarrierName { get; set; }

        /// <summary>The name of the pickup service (for example, `"Access point"`). Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("serviceName")]
        public virtual string ServiceName { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class PickupServicesPickupService : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The name of the carrier (for example, `"UPS"`). Always present.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("carrierName")]
        public virtual string CarrierName { get; set; }

        /// <summary>The CLDR country code of the carrier (for example, "US"). Always present.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; }

        /// <summary>The name of the pickup service (for example, `"Access point"`). Always present.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("serviceName")]
        public virtual string ServiceName { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class PosCustomBatchRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The request entries to be processed in the batch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<PosCustomBatchRequestEntry> Entries { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class PosCustomBatchRequestEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>An entry ID, unique within the batch request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>The inventory to submit. This should be set only if the method is `inventory`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inventory")]
        public virtual PosInventory Inventory { get; set; }

        /// <summary>The ID of the POS data provider.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("merchantId")]
        public virtual System.Nullable<ulong> MerchantId { get; set; }

        /// <summary>
        /// The method of the batch entry. Acceptable values are: - "`delete`" - "`get`" - "`insert`" - "`inventory`" -
        /// "`sale`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("method")]
        public virtual string Method { get; set; }

        /// <summary>The sale information to submit. This should be set only if the method is `sale`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sale")]
        public virtual PosSale Sale { get; set; }

        /// <summary>The store information to submit. This should be set only if the method is `insert`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("store")]
        public virtual PosStore Store { get; set; }

        /// <summary>The store code. This should be set only if the method is `delete` or `get`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeCode")]
        public virtual string StoreCode { get; set; }

        /// <summary>The ID of the account for which to get/submit data.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetMerchantId")]
        public virtual System.Nullable<ulong> TargetMerchantId { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class PosCustomBatchResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The result of the execution of the batch requests.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<PosCustomBatchResponseEntry> Entries { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#posCustomBatchResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class PosCustomBatchResponseEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the request entry to which this entry responds.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>A list of errors defined if, and only if, the request failed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("errors")]
        public virtual Errors Errors { get; set; }

        /// <summary>The updated inventory information.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inventory")]
        public virtual PosInventory Inventory { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#posCustomBatchResponseEntry`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The updated sale information.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sale")]
        public virtual PosSale Sale { get; set; }

        /// <summary>The retrieved or updated store information.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("store")]
        public virtual PosStore Store { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class PosDataProviders : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Country code.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; }

        /// <summary>A list of POS data providers.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("posDataProviders")]
        public virtual System.Collections.Generic.IList<PosDataProvidersPosDataProvider> PosDataProvidersValue { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class PosDataProvidersPosDataProvider : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The display name of Pos data Provider.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; }

        /// <summary>The full name of this POS data Provider.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fullName")]
        public virtual string FullName { get; set; }

        /// <summary>The ID of the account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("providerId")]
        public virtual System.Nullable<ulong> ProviderId { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The absolute quantity of an item available at the given store.</summary>
    public class PosInventory : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The two-letter ISO 639-1 language code for the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contentLanguage")]
        public virtual string ContentLanguage { get; set; }

        /// <summary>Global Trade Item Number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gtin")]
        public virtual string Gtin { get; set; }

        /// <summary>Required. A unique identifier for the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemId")]
        public virtual string ItemId { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#posInventory`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>
        /// Optional. Supported pickup method for this offer. Unless the value is "not supported", this field must be
        /// submitted together with `pickupSla`. For accepted attribute values, see the [local product inventory feed
        /// specification](https://support.google.com/merchants/answer/3061342).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pickupMethod")]
        public virtual string PickupMethod { get; set; }

        /// <summary>
        /// Optional. Expected date that an order will be ready for pickup relative to the order date. Must be submitted
        /// together with `pickupMethod`. For accepted attribute values, see the [local product inventory feed
        /// specification](https://support.google.com/merchants/answer/3061342).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pickupSla")]
        public virtual string PickupSla { get; set; }

        /// <summary>Required. The current price of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("price")]
        public virtual Price Price { get; set; }

        /// <summary>Required. The available quantity of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("quantity")]
        public virtual System.Nullable<long> Quantity { get; set; }

        /// <summary>
        /// Required. The identifier of the merchant's store. Either a `storeCode` inserted through the API or the code
        /// of the store in a Business Profile.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeCode")]
        public virtual string StoreCode { get; set; }

        /// <summary>Required. The CLDR territory code for the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetCountry")]
        public virtual string TargetCountry { get; set; }

        /// <summary>Required. The inventory timestamp, in ISO 8601 format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("timestamp")]
        public virtual string Timestamp { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class PosInventoryRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The two-letter ISO 639-1 language code for the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contentLanguage")]
        public virtual string ContentLanguage { get; set; }

        /// <summary>Global Trade Item Number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gtin")]
        public virtual string Gtin { get; set; }

        /// <summary>Required. A unique identifier for the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemId")]
        public virtual string ItemId { get; set; }

        /// <summary>
        /// Optional. Supported pickup method for this offer. Unless the value is "not supported", this field must be
        /// submitted together with `pickupSla`. For accepted attribute values, see the [local product inventory feed
        /// specification](https://support.google.com/merchants/answer/3061342).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pickupMethod")]
        public virtual string PickupMethod { get; set; }

        /// <summary>
        /// Optional. Expected date that an order will be ready for pickup relative to the order date. Must be submitted
        /// together with `pickupMethod`. For accepted attribute values, see the [local product inventory feed
        /// specification](https://support.google.com/merchants/answer/3061342).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pickupSla")]
        public virtual string PickupSla { get; set; }

        /// <summary>Required. The current price of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("price")]
        public virtual Price Price { get; set; }

        /// <summary>Required. The available quantity of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("quantity")]
        public virtual System.Nullable<long> Quantity { get; set; }

        /// <summary>
        /// Required. The identifier of the merchant's store. Either a `storeCode` inserted through the API or the code
        /// of the store in a Business Profile.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeCode")]
        public virtual string StoreCode { get; set; }

        /// <summary>Required. The CLDR territory code for the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetCountry")]
        public virtual string TargetCountry { get; set; }

        /// <summary>Required. The inventory timestamp, in ISO 8601 format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("timestamp")]
        public virtual string Timestamp { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class PosInventoryResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The two-letter ISO 639-1 language code for the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contentLanguage")]
        public virtual string ContentLanguage { get; set; }

        /// <summary>Global Trade Item Number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gtin")]
        public virtual string Gtin { get; set; }

        /// <summary>Required. A unique identifier for the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemId")]
        public virtual string ItemId { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#posInventoryResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>
        /// Optional. Supported pickup method for this offer. Unless the value is "not supported", this field must be
        /// submitted together with `pickupSla`. For accepted attribute values, see the [local product inventory feed
        /// specification](https://support.google.com/merchants/answer/3061342).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pickupMethod")]
        public virtual string PickupMethod { get; set; }

        /// <summary>
        /// Optional. Expected date that an order will be ready for pickup relative to the order date. Must be submitted
        /// together with `pickupMethod`. For accepted attribute values, see the [local product inventory feed
        /// specification](https://support.google.com/merchants/answer/3061342).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pickupSla")]
        public virtual string PickupSla { get; set; }

        /// <summary>Required. The current price of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("price")]
        public virtual Price Price { get; set; }

        /// <summary>Required. The available quantity of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("quantity")]
        public virtual System.Nullable<long> Quantity { get; set; }

        /// <summary>
        /// Required. The identifier of the merchant's store. Either a `storeCode` inserted through the API or the code
        /// of the store in a Business Profile.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeCode")]
        public virtual string StoreCode { get; set; }

        /// <summary>Required. The CLDR territory code for the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetCountry")]
        public virtual string TargetCountry { get; set; }

        /// <summary>Required. The inventory timestamp, in ISO 8601 format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("timestamp")]
        public virtual string Timestamp { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class PosListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#posListResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        [Newtonsoft.Json.JsonPropertyAttribute("resources")]
        public virtual System.Collections.Generic.IList<PosStore> Resources { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The change of the available quantity of an item at the given store.</summary>
    public class PosSale : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The two-letter ISO 639-1 language code for the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contentLanguage")]
        public virtual string ContentLanguage { get; set; }

        /// <summary>Global Trade Item Number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gtin")]
        public virtual string Gtin { get; set; }

        /// <summary>Required. A unique identifier for the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemId")]
        public virtual string ItemId { get; set; }

        /// <summary>Identifies what kind of resource this is. Value: the fixed string "`content#posSale`"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>Required. The price of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("price")]
        public virtual Price Price { get; set; }

        /// <summary>Required. The relative change of the available quantity. Negative for items returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("quantity")]
        public virtual System.Nullable<long> Quantity { get; set; }

        /// <summary>A unique ID to group items from the same sale event.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("saleId")]
        public virtual string SaleId { get; set; }

        /// <summary>
        /// Required. The identifier of the merchant's store. Either a `storeCode` inserted through the API or the code
        /// of the store in a Business Profile.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeCode")]
        public virtual string StoreCode { get; set; }

        /// <summary>Required. The CLDR territory code for the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetCountry")]
        public virtual string TargetCountry { get; set; }

        /// <summary>Required. The inventory timestamp, in ISO 8601 format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("timestamp")]
        public virtual string Timestamp { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class PosSaleRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The two-letter ISO 639-1 language code for the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contentLanguage")]
        public virtual string ContentLanguage { get; set; }

        /// <summary>Global Trade Item Number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gtin")]
        public virtual string Gtin { get; set; }

        /// <summary>Required. A unique identifier for the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemId")]
        public virtual string ItemId { get; set; }

        /// <summary>Required. The price of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("price")]
        public virtual Price Price { get; set; }

        /// <summary>Required. The relative change of the available quantity. Negative for items returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("quantity")]
        public virtual System.Nullable<long> Quantity { get; set; }

        /// <summary>A unique ID to group items from the same sale event.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("saleId")]
        public virtual string SaleId { get; set; }

        /// <summary>
        /// Required. The identifier of the merchant's store. Either a `storeCode` inserted through the API or the code
        /// of the store in a Business Profile.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeCode")]
        public virtual string StoreCode { get; set; }

        /// <summary>Required. The CLDR territory code for the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetCountry")]
        public virtual string TargetCountry { get; set; }

        /// <summary>Required. The inventory timestamp, in ISO 8601 format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("timestamp")]
        public virtual string Timestamp { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class PosSaleResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The two-letter ISO 639-1 language code for the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contentLanguage")]
        public virtual string ContentLanguage { get; set; }

        /// <summary>Global Trade Item Number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gtin")]
        public virtual string Gtin { get; set; }

        /// <summary>Required. A unique identifier for the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemId")]
        public virtual string ItemId { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#posSaleResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>Required. The price of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("price")]
        public virtual Price Price { get; set; }

        /// <summary>Required. The relative change of the available quantity. Negative for items returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("quantity")]
        public virtual System.Nullable<long> Quantity { get; set; }

        /// <summary>A unique ID to group items from the same sale event.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("saleId")]
        public virtual string SaleId { get; set; }

        /// <summary>
        /// Required. The identifier of the merchant's store. Either a `storeCode` inserted through the API or the code
        /// of the store in a Business Profile.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeCode")]
        public virtual string StoreCode { get; set; }

        /// <summary>Required. The CLDR territory code for the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetCountry")]
        public virtual string TargetCountry { get; set; }

        /// <summary>Required. The inventory timestamp, in ISO 8601 format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("timestamp")]
        public virtual string Timestamp { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Store resource.</summary>
    public class PosStore : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The business type of the store.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gcidCategory")]
        public virtual System.Collections.Generic.IList<string> GcidCategory { get; set; }

        /// <summary>Identifies what kind of resource this is. Value: the fixed string "`content#posStore`"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>
        /// Output only. The matching status of POS store and Google Business Profile store. Possible values are: -
        /// "`matched`": The POS store is successfully matched with the Google Business Profile store. - "`failed`": The
        /// POS store is not matched with the Google Business Profile store. See matching_status_hint for further
        /// details. Note that there is up to 48 hours propagation delay for changes in Merchant Center (e.g. creation
        /// of new account, accounts linking) and Google Business Profile (e.g. store address update) which may affect
        /// the matching status. In such cases, after a delay call
        /// [pos.list](https://developers.google.com/shopping-content/reference/rest/v2.1/pos/list) to retrieve the
        /// updated matching status.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("matchingStatus")]
        public virtual string MatchingStatus { get; set; }

        /// <summary>
        /// Output only. The hint of why the matching has failed. This is only set when matching_status=failed. Possible
        /// values are: - "`linked-store-not-found`": There aren't any Google Business Profile stores available for
        /// matching. Connect your Merchant Center account with the Google Business Profile account. Or add a new Google
        /// Business Profile store corresponding to the POS store. - "`store-match-not-found`": The provided POS store
        /// couldn't be matched to any of the connected Google Business Profile stores. Merchant Center account is
        /// connected correctly and stores are available on Google Business Profile, but POS store location address does
        /// not match with Google Business Profile stores' addresses. Update POS store address or Google Business
        /// Profile store address to match correctly. - "`store-match-unverified`": The provided POS store couldn't be
        /// matched to any of the connected Google Business Profile stores, as the matched Google Business Profile store
        /// is unverified. Go through the Google Business Profile verification process to match correctly.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("matchingStatusHint")]
        public virtual string MatchingStatusHint { get; set; }

        /// <summary>The store phone number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("phoneNumber")]
        public virtual string PhoneNumber { get; set; }

        /// <summary>The Google Place Id of the store location.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("placeId")]
        public virtual string PlaceId { get; set; }

        /// <summary>Required. The street address of the store.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeAddress")]
        public virtual string StoreAddress { get; set; }

        /// <summary>Required. A store identifier that is unique for the given merchant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeCode")]
        public virtual string StoreCode { get; set; }

        /// <summary>The merchant or store name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeName")]
        public virtual string StoreName { get; set; }

        /// <summary>The website url for the store or merchant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("websiteUrl")]
        public virtual string WebsiteUrl { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class PostalCodeGroup : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The CLDR territory code of the country the postal code group applies to. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; }

        /// <summary>The name of the postal code group, referred to in headers. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        /// <summary>A range of postal codes. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("postalCodeRanges")]
        public virtual System.Collections.Generic.IList<PostalCodeRange> PostalCodeRanges { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class PostalCodeRange : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// A postal code or a pattern of the form `prefix*` denoting the inclusive lower bound of the range defining
        /// the area. Examples values: `"94108"`, `"9410*"`, `"9*"`. Required.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("postalCodeRangeBegin")]
        public virtual string PostalCodeRangeBegin { get; set; }

        /// <summary>
        /// A postal code or a pattern of the form `prefix*` denoting the inclusive upper bound of the range defining
        /// the area. It must have the same length as `postalCodeRangeBegin`: if `postalCodeRangeBegin` is a postal code
        /// then `postalCodeRangeEnd` must be a postal code too; if `postalCodeRangeBegin` is a pattern then
        /// `postalCodeRangeEnd` must be a pattern with the same prefix length. Optional: if not set, then the area is
        /// defined as being all the postal codes matching `postalCodeRangeBegin`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("postalCodeRangeEnd")]
        public virtual string PostalCodeRangeEnd { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class Price : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The currency of the price.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("currency")]
        public virtual string Currency { get; set; }

        /// <summary>The price represented as a number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The price represented as a number and currency.</summary>
    public class PriceAmount : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The currency of the price.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("currency")]
        public virtual string Currency { get; set; }

        /// <summary>The price represented as a number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Price competitiveness fields requested by the merchant in the query. Field values are only set if the merchant
    /// queries `PriceCompetitivenessProductView`. https://support.google.com/merchants/answer/9626903
    /// </summary>
    public class PriceCompetitiveness : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The price benchmark currency (ISO 4217 code).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("benchmarkPriceCurrencyCode")]
        public virtual string BenchmarkPriceCurrencyCode { get; set; }

        /// <summary>
        /// The latest available price benchmark in micros (1 millionth of a standard unit, 1 USD = 1000000 micros) for
        /// the product's catalog in the benchmark country.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("benchmarkPriceMicros")]
        public virtual System.Nullable<long> BenchmarkPriceMicros { get; set; }

        /// <summary>The country of the price benchmark (ISO 3166 code).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("countryCode")]
        public virtual string CountryCode { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Price insights fields requested by the merchant in the query. Field values are only set if the merchant queries
    /// `PriceInsightsProductView`. https://support.google.com/merchants/answer/11916926
    /// </summary>
    public class PriceInsights : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The predicted effectiveness of applying the price suggestion, bucketed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("effectiveness")]
        public virtual string Effectiveness { get; set; }

        /// <summary>
        /// The predicted change in clicks as a fraction after introducing the suggested price compared to current
        /// active price. For example, 0.05 is a 5% predicted increase in clicks.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("predictedClicksChangeFraction")]
        public virtual System.Nullable<double> PredictedClicksChangeFraction { get; set; }

        /// <summary>
        /// The predicted change in conversions as a fraction after introducing the suggested price compared to current
        /// active price. For example, 0.05 is a 5% predicted increase in conversions).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("predictedConversionsChangeFraction")]
        public virtual System.Nullable<double> PredictedConversionsChangeFraction { get; set; }

        /// <summary>
        /// *Deprecated*: This field is no longer supported and will start returning 0. The predicted change in gross
        /// profit as a fraction after introducing the suggested price compared to current active price. For example,
        /// 0.05 is a 5% predicted increase in gross profit.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("predictedGrossProfitChangeFraction")]
        public virtual System.Nullable<double> PredictedGrossProfitChangeFraction { get; set; }

        /// <summary>
        /// The predicted change in impressions as a fraction after introducing the suggested price compared to current
        /// active price. For example, 0.05 is a 5% predicted increase in impressions.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("predictedImpressionsChangeFraction")]
        public virtual System.Nullable<double> PredictedImpressionsChangeFraction { get; set; }

        /// <summary>
        /// *Deprecated*: This field is no longer supported and will start returning USD for all requests. The predicted
        /// monthly gross profit change currency (ISO 4217 code).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("predictedMonthlyGrossProfitChangeCurrencyCode")]
        public virtual string PredictedMonthlyGrossProfitChangeCurrencyCode { get; set; }

        /// <summary>
        /// *Deprecated*: This field is no longer supported and will start returning 0. The predicted change in gross
        /// profit in micros (1 millionth of a standard unit, 1 USD = 1000000 micros) after introducing the suggested
        /// price for a month compared to current active price.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("predictedMonthlyGrossProfitChangeMicros")]
        public virtual System.Nullable<long> PredictedMonthlyGrossProfitChangeMicros { get; set; }

        /// <summary>The suggested price currency (ISO 4217 code).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("suggestedPriceCurrencyCode")]
        public virtual string SuggestedPriceCurrencyCode { get; set; }

        /// <summary>
        /// The latest suggested price in micros (1 millionth of a standard unit, 1 USD = 1000000 micros) for the
        /// product.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("suggestedPriceMicros")]
        public virtual System.Nullable<long> SuggestedPriceMicros { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    ///  Required product attributes are primarily defined by the product data specification. See the Product Data
    /// Specification Help Center article for information. Product data. After inserting, updating, or deleting a
    /// product, it may take several minutes before changes take effect. The following reference documentation lists the
    /// field names in the **camelCase** casing style while the Products Data Specification lists the names in the
    /// **snake_case** casing style.
    /// </summary>
    public class Product : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Additional URLs of images of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("additionalImageLinks")]
        public virtual System.Collections.Generic.IList<string> AdditionalImageLinks { get; set; }

        /// <summary>
        /// Additional cut of the item. Used together with size_type to represent combined size types for apparel items.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("additionalSizeType")]
        public virtual string AdditionalSizeType { get; set; }

        /// <summary>Used to group items in an arbitrary way. Only for CPA%, discouraged otherwise.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("adsGrouping")]
        public virtual string AdsGrouping { get; set; }

        /// <summary>Similar to ads_grouping, but only works on CPC.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("adsLabels")]
        public virtual System.Collections.Generic.IList<string> AdsLabels { get; set; }

        /// <summary>
        /// Allows advertisers to override the item URL when the product is shown within the context of Product Ads.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("adsRedirect")]
        public virtual string AdsRedirect { get; set; }

        /// <summary>Should be set to true if the item is targeted towards adults.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("adult")]
        public virtual System.Nullable<bool> Adult { get; set; }

        /// <summary>Target age group of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ageGroup")]
        public virtual string AgeGroup { get; set; }

        /// <summary>
        /// A safeguard in the [Automated Discounts](//support.google.com/merchants/answer/10295759) and [Dynamic
        /// Promotions](//support.google.com/merchants/answer/13949249) projects, ensuring that discounts on merchants'
        /// offers do not fall below this value, thereby preserving the offer's value and profitability.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("autoPricingMinPrice")]
        public virtual Price AutoPricingMinPrice { get; set; }

        /// <summary>Availability status of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("availability")]
        public virtual string Availability { get; set; }

        /// <summary>The day a pre-ordered product becomes available for delivery, in ISO 8601 format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("availabilityDate")]
        public virtual string AvailabilityDate { get; set; }

        /// <summary>Brand of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("brand")]
        public virtual string Brand { get; set; }

        /// <summary>URL for the canonical version of your item's landing page.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("canonicalLink")]
        public virtual string CanonicalLink { get; set; }

        /// <summary>
        /// Product [certification](https://support.google.com/merchants/answer/13528839), introduced for EU energy
        /// efficiency labeling compliance using the [EU EPREL](https://eprel.ec.europa.eu/screen/home) database.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("certifications")]
        public virtual System.Collections.Generic.IList<ProductCertification> Certifications { get; set; }

        /// <summary>
        /// Required. The item's channel (online or local). Acceptable values are: - "`local`" - "`online`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("channel")]
        public virtual string Channel { get; set; }

        /// <summary>Extra fields to export to the Cloud Retail program.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cloudExportAdditionalProperties")]
        public virtual System.Collections.Generic.IList<CloudExportAdditionalProperties> CloudExportAdditionalProperties { get; set; }

        /// <summary>Color of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("color")]
        public virtual string Color { get; set; }

        /// <summary>Condition or state of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("condition")]
        public virtual string Condition { get; set; }

        /// <summary>Required. The two-letter ISO 639-1 language code for the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contentLanguage")]
        public virtual string ContentLanguage { get; set; }

        /// <summary>Cost of goods sold. Used for gross profit reporting.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("costOfGoodsSold")]
        public virtual Price CostOfGoodsSold { get; set; }

        /// <summary>
        /// A list of custom (merchant-provided) attributes. It can also be used for submitting any attribute of the
        /// feed specification in its generic form (for example, `{ "name": "size type", "value": "regular" }`). This is
        /// useful for submitting attributes not explicitly exposed by the API, such as additional attributes used for
        /// Buy on Google (formerly known as Shopping Actions).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customAttributes")]
        public virtual System.Collections.Generic.IList<CustomAttribute> CustomAttributes { get; set; }

        /// <summary>Custom label 0 for custom grouping of items in a Shopping campaign.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customLabel0")]
        public virtual string CustomLabel0 { get; set; }

        /// <summary>Custom label 1 for custom grouping of items in a Shopping campaign.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customLabel1")]
        public virtual string CustomLabel1 { get; set; }

        /// <summary>Custom label 2 for custom grouping of items in a Shopping campaign.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customLabel2")]
        public virtual string CustomLabel2 { get; set; }

        /// <summary>Custom label 3 for custom grouping of items in a Shopping campaign.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customLabel3")]
        public virtual string CustomLabel3 { get; set; }

        /// <summary>Custom label 4 for custom grouping of items in a Shopping campaign.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customLabel4")]
        public virtual string CustomLabel4 { get; set; }

        /// <summary>Description of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; }

        /// <summary>
        /// The date time when an offer becomes visible in search results across Google’s YouTube surfaces, in [ISO
        /// 8601](http://en.wikipedia.org/wiki/ISO_8601) format. See [Disclosure
        /// date](https://support.google.com/merchants/answer/13034208) for more information.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("disclosureDate")]
        public virtual string DisclosureDate { get; set; }

        /// <summary>An identifier for an item for dynamic remarketing campaigns.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayAdsId")]
        public virtual string DisplayAdsId { get; set; }

        /// <summary>URL directly to your item's landing page for dynamic remarketing campaigns.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayAdsLink")]
        public virtual string DisplayAdsLink { get; set; }

        /// <summary>Advertiser-specified recommendations.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayAdsSimilarIds")]
        public virtual System.Collections.Generic.IList<string> DisplayAdsSimilarIds { get; set; }

        /// <summary>Title of an item for dynamic remarketing campaigns.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayAdsTitle")]
        public virtual string DisplayAdsTitle { get; set; }

        /// <summary>Offer margin for dynamic remarketing campaigns.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayAdsValue")]
        public virtual System.Nullable<double> DisplayAdsValue { get; set; }

        /// <summary>The energy efficiency class as defined in EU directive 2010/30/EU.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("energyEfficiencyClass")]
        public virtual string EnergyEfficiencyClass { get; set; }

        /// <summary>
        /// The list of [destinations to exclude](//support.google.com/merchants/answer/6324486) for this target
        /// (corresponds to cleared check boxes in Merchant Center). Products that are excluded from all destinations
        /// for more than 7 days are automatically deleted.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("excludedDestinations")]
        public virtual System.Collections.Generic.IList<string> ExcludedDestinations { get; set; }

        /// <summary>
        /// Date on which the item should expire, as specified upon insertion, in ISO 8601 format. The actual expiration
        /// date in Google Shopping is exposed in `productstatuses` as `googleExpirationDate` and might be earlier if
        /// `expirationDate` is too far in the future.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("expirationDate")]
        public virtual string ExpirationDate { get; set; }

        /// <summary>
        /// Required for multi-seller accounts. Use this attribute if you're a marketplace uploading products for
        /// various sellers to your multi-seller account.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("externalSellerId")]
        public virtual string ExternalSellerId { get; set; }

        /// <summary>
        /// Feed label for the item. Either `targetCountry` or `feedLabel` is required. Must be less than or equal to 20
        /// uppercase letters (A-Z), numbers (0-9), and dashes (-).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("feedLabel")]
        public virtual string FeedLabel { get; set; }

        /// <summary>Optional. Conditions to be met for a product to have free shipping.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("freeShippingThreshold")]
        public virtual System.Collections.Generic.IList<FreeShippingThreshold> FreeShippingThreshold { get; set; }

        /// <summary>Target gender of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gender")]
        public virtual string Gender { get; set; }

        /// <summary>
        /// Google's category of the item (see [Google product
        /// taxonomy](https://support.google.com/merchants/answer/1705911)). When querying products, this field will
        /// contain the user provided value. There is currently no way to get back the auto assigned google product
        /// categories through the API.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("googleProductCategory")]
        public virtual string GoogleProductCategory { get; set; }

        /// <summary>Global Trade Item Number (GTIN) of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gtin")]
        public virtual string Gtin { get; set; }

        /// <summary>
        /// The REST ID of the product. Content API methods that operate on products take this as their `productId`
        /// parameter. The REST ID for a product has one of the 2 forms channel:contentLanguage: targetCountry: offerId
        /// or channel:contentLanguage:feedLabel: offerId.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; }

        /// <summary>
        /// False when the item does not have unique product identifiers appropriate to its category, such as GTIN, MPN,
        /// and brand. Required according to the Unique Product Identifier Rules for all target countries except for
        /// Canada.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("identifierExists")]
        public virtual System.Nullable<bool> IdentifierExists { get; set; }

        /// <summary>URL of an image of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("imageLink")]
        public virtual string ImageLink { get; set; }

        /// <summary>
        /// The list of [destinations to include](//support.google.com/merchants/answer/7501026) for this target
        /// (corresponds to checked check boxes in Merchant Center). Default destinations are always included unless
        /// provided in `excludedDestinations`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("includedDestinations")]
        public virtual System.Collections.Generic.IList<string> IncludedDestinations { get; set; }

        /// <summary>Number and amount of installments to pay for an item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("installment")]
        public virtual Installment Installment { get; set; }

        /// <summary>
        /// Whether the item is a merchant-defined bundle. A bundle is a custom grouping of different products sold by a
        /// merchant for a single price.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isBundle")]
        public virtual System.Nullable<bool> IsBundle { get; set; }

        /// <summary>Shared identifier for all variants of the same product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemGroupId")]
        public virtual string ItemGroupId { get; set; }

        /// <summary>Identifies what kind of resource this is. Value: the fixed string "`content#product`"</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>
        /// Additional URLs of lifestyle images of the item. Used to explicitly identify images that showcase your item
        /// in a real-world context. See the Help Center article for more information.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("lifestyleImageLinks")]
        public virtual System.Collections.Generic.IList<string> LifestyleImageLinks { get; set; }

        /// <summary>URL directly linking to your item's page on your website.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("link")]
        public virtual string Link { get; set; }

        /// <summary>URL template for merchant hosted local storefront.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("linkTemplate")]
        public virtual string LinkTemplate { get; set; }

        /// <summary>
        /// Loyalty program information that is used to surface loyalty benefits ( for example, better pricing, points,
        /// etc) to the user of this item. This signular field points to the latest uploaded loyalty program info. This
        /// field will be deprecated in the coming weeks and should not be used in favor of the plural 'LoyaltyProgram'
        /// field below.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("loyaltyProgram")]
        public virtual LoyaltyProgram LoyaltyProgram { get; set; }

        /// <summary>
        /// Optional. A list of loyalty program information that is used to surface loyalty benefits (for example,
        /// better pricing, points, etc) to the user of this item.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("loyaltyPrograms")]
        public virtual System.Collections.Generic.IList<LoyaltyProgram> LoyaltyPrograms { get; set; }

        /// <summary>The material of which the item is made.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("material")]
        public virtual string Material { get; set; }

        /// <summary>The energy efficiency class as defined in EU directive 2010/30/EU.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxEnergyEfficiencyClass")]
        public virtual string MaxEnergyEfficiencyClass { get; set; }

        /// <summary>Maximal product handling time (in business days).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxHandlingTime")]
        public virtual System.Nullable<long> MaxHandlingTime { get; set; }

        /// <summary>Maximum retail price (MRP) of the item. Applicable to India only.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maximumRetailPrice")]
        public virtual Price MaximumRetailPrice { get; set; }

        /// <summary>The energy efficiency class as defined in EU directive 2010/30/EU.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minEnergyEfficiencyClass")]
        public virtual string MinEnergyEfficiencyClass { get; set; }

        /// <summary>Minimal product handling time (in business days).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minHandlingTime")]
        public virtual System.Nullable<long> MinHandlingTime { get; set; }

        /// <summary>URL for the mobile-optimized version of your item's landing page.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("mobileLink")]
        public virtual string MobileLink { get; set; }

        /// <summary>URL template for merchant hosted local storefront optimized for mobile devices.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("mobileLinkTemplate")]
        public virtual string MobileLinkTemplate { get; set; }

        /// <summary>Manufacturer Part Number (MPN) of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("mpn")]
        public virtual string Mpn { get; set; }

        /// <summary>The number of identical products in a merchant-defined multipack.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("multipack")]
        public virtual System.Nullable<long> Multipack { get; set; }

        /// <summary>
        /// Required. A unique identifier for the item. Leading and trailing whitespaces are stripped and multiple
        /// whitespaces are replaced by a single whitespace upon submission. Only valid unicode characters are accepted.
        /// See the products feed specification for details. *Note:* Content API methods that operate on products take
        /// the REST ID of the product, *not* this identifier.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("offerId")]
        public virtual string OfferId { get; set; }

        /// <summary>The item's pattern (for example, polka dots).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pattern")]
        public virtual string Pattern { get; set; }

        /// <summary>Publication of this item should be temporarily paused. Acceptable values are: - "`ads`" </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pause")]
        public virtual string Pause { get; set; }

        /// <summary>
        /// The pick up option for the item. Acceptable values are: - "`buy`" - "`reserve`" - "`ship to store`" - "`not
        /// supported`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pickupMethod")]
        public virtual string PickupMethod { get; set; }

        /// <summary>
        /// Item store pickup timeline. Acceptable values are: - "`same day`" - "`next day`" - "`2-day`" - "`3-day`" -
        /// "`4-day`" - "`5-day`" - "`6-day`" - "`7-day`" - "`multi-week`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pickupSla")]
        public virtual string PickupSla { get; set; }

        /// <summary>Price of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("price")]
        public virtual Price Price { get; set; }

        /// <summary>Technical specification or additional product details.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productDetails")]
        public virtual System.Collections.Generic.IList<ProductProductDetail> ProductDetails { get; set; }

        /// <summary>
        /// The height of the product in the units provided. The value must be between 0 (exclusive) and 3000
        /// (inclusive).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productHeight")]
        public virtual ProductDimension ProductHeight { get; set; }

        /// <summary>Bullet points describing the most relevant highlights of a product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productHighlights")]
        public virtual System.Collections.Generic.IList<string> ProductHighlights { get; set; }

        /// <summary>
        /// The length of the product in the units provided. The value must be between 0 (exclusive) and 3000
        /// (inclusive).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productLength")]
        public virtual ProductDimension ProductLength { get; set; }

        /// <summary>Categories of the item (formatted as in product data specification).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productTypes")]
        public virtual System.Collections.Generic.IList<string> ProductTypes { get; set; }

        /// <summary>
        /// The weight of the product in the units provided. The value must be between 0 (exclusive) and 2000
        /// (inclusive).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productWeight")]
        public virtual ProductWeight ProductWeight { get; set; }

        /// <summary>
        /// The width of the product in the units provided. The value must be between 0 (exclusive) and 3000
        /// (inclusive).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productWidth")]
        public virtual ProductDimension ProductWidth { get; set; }

        /// <summary>The unique ID of a promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("promotionIds")]
        public virtual System.Collections.Generic.IList<string> PromotionIds { get; set; }

        /// <summary>Advertised sale price of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("salePrice")]
        public virtual Price SalePrice { get; set; }

        /// <summary>Date range during which the item is on sale (see product data specification ).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("salePriceEffectiveDate")]
        public virtual string SalePriceEffectiveDate { get; set; }

        /// <summary>
        /// The quantity of the product that is available for selling on Google. Supported only for online products.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sellOnGoogleQuantity")]
        public virtual System.Nullable<long> SellOnGoogleQuantity { get; set; }

        /// <summary>Shipping rules.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shipping")]
        public virtual System.Collections.Generic.IList<ProductShipping> Shipping { get; set; }

        /// <summary>Height of the item for shipping.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippingHeight")]
        public virtual ProductShippingDimension ShippingHeight { get; set; }

        /// <summary>The shipping label of the product, used to group product in account-level shipping rules.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippingLabel")]
        public virtual string ShippingLabel { get; set; }

        /// <summary>Length of the item for shipping.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippingLength")]
        public virtual ProductShippingDimension ShippingLength { get; set; }

        /// <summary>Weight of the item for shipping.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippingWeight")]
        public virtual ProductShippingWeight ShippingWeight { get; set; }

        /// <summary>Width of the item for shipping.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippingWidth")]
        public virtual ProductShippingDimension ShippingWidth { get; set; }

        /// <summary>
        /// List of country codes (ISO 3166-1 alpha-2) to exclude the offer from Shopping Ads destination. Countries
        /// from this list are removed from countries configured in MC feed settings.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shoppingAdsExcludedCountries")]
        public virtual System.Collections.Generic.IList<string> ShoppingAdsExcludedCountries { get; set; }

        /// <summary>System in which the size is specified. Recommended for apparel items.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sizeSystem")]
        public virtual string SizeSystem { get; set; }

        /// <summary>The cut of the item. Recommended for apparel items.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sizeType")]
        public virtual string SizeType { get; set; }

        /// <summary>
        /// Size of the item. Only one value is allowed. For variants with different sizes, insert a separate product
        /// for each size with the same `itemGroupId` value (see size definition).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sizes")]
        public virtual System.Collections.Generic.IList<string> Sizes { get; set; }

        /// <summary>
        /// Output only. The source of the offer, that is, how the offer was created. Acceptable values are: - "`api`" -
        /// "`crawl`" - "`feed`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("source")]
        public virtual string Source { get; set; }

        /// <summary>Structured description, for algorithmically (AI)-generated descriptions.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("structuredDescription")]
        public virtual ProductStructuredDescription StructuredDescription { get; set; }

        /// <summary>Structured title, for algorithmically (AI)-generated titles.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("structuredTitle")]
        public virtual ProductStructuredTitle StructuredTitle { get; set; }

        /// <summary>
        /// Number of periods (months or years) and amount of payment per period for an item with an associated
        /// subscription contract.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("subscriptionCost")]
        public virtual ProductSubscriptionCost SubscriptionCost { get; set; }

        /// <summary>Optional. The list of sustainability incentive programs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sustainabilityIncentives")]
        public virtual System.Collections.Generic.IList<ProductSustainabilityIncentive> SustainabilityIncentives { get; set; }

        /// <summary>Required. The CLDR territory code for the item's country of sale.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetCountry")]
        public virtual string TargetCountry { get; set; }

        /// <summary>
        /// The tax category of the product, used to configure detailed tax nexus in account-level tax settings.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("taxCategory")]
        public virtual string TaxCategory { get; set; }

        /// <summary>Tax information.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("taxes")]
        public virtual System.Collections.Generic.IList<ProductTax> Taxes { get; set; }

        /// <summary>Title of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; }

        /// <summary>
        /// The transit time label of the product, used to group product in account-level transit time tables.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("transitTimeLabel")]
        public virtual string TransitTimeLabel { get; set; }

        /// <summary>The preference of the denominator of the unit price.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("unitPricingBaseMeasure")]
        public virtual ProductUnitPricingBaseMeasure UnitPricingBaseMeasure { get; set; }

        /// <summary>The measure and dimension of an item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("unitPricingMeasure")]
        public virtual ProductUnitPricingMeasure UnitPricingMeasure { get; set; }

        /// <summary>URL of the 3D model of the item to provide more visuals.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("virtualModelLink")]
        public virtual string VirtualModelLink { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Product [certification](https://support.google.com/merchants/answer/13528839), introduced for EU energy
    /// efficiency labeling compliance using the [EU EPREL](https://eprel.ec.europa.eu/screen/home) database.
    /// </summary>
    public class ProductCertification : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The certification authority, for example "European_Commission". Maximum length is 2000 characters.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("certificationAuthority")]
        public virtual string CertificationAuthority { get; set; }

        /// <summary>The certification code, for eaxample "123456". Maximum length is 2000 characters.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("certificationCode")]
        public virtual string CertificationCode { get; set; }

        /// <summary>The name of the certification, for example "EPREL". Maximum length is 2000 characters.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("certificationName")]
        public virtual string CertificationName { get; set; }

        /// <summary>
        /// The certification value (also known as class, level or grade), for example "A+", "C", "gold". Maximum length
        /// is 2000 characters.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("certificationValue")]
        public virtual string CertificationValue { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Product cluster fields. A product cluster is a grouping for different offers that represent the same product.
    /// Values are only set for fields requested explicitly in the request's search query.
    /// </summary>
    public class ProductCluster : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Brand of the product cluster.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("brand")]
        public virtual string Brand { get; set; }

        /// <summary>
        /// Tells if there is at least one product of the brand currently `IN_STOCK` in your product feed across
        /// multiple countries, all products are `OUT_OF_STOCK` in your product feed, or `NOT_IN_INVENTORY`. The field
        /// doesn't take the Best Sellers report country filter into account.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("brandInventoryStatus")]
        public virtual string BrandInventoryStatus { get; set; }

        /// <summary>
        /// Product category (1st level) of the product cluster, represented in Google's product taxonomy.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categoryL1")]
        public virtual string CategoryL1 { get; set; }

        /// <summary>
        /// Product category (2nd level) of the product cluster, represented in Google's product taxonomy.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categoryL2")]
        public virtual string CategoryL2 { get; set; }

        /// <summary>
        /// Product category (3rd level) of the product cluster, represented in Google's product taxonomy.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categoryL3")]
        public virtual string CategoryL3 { get; set; }

        /// <summary>
        /// Product category (4th level) of the product cluster, represented in Google's product taxonomy.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categoryL4")]
        public virtual string CategoryL4 { get; set; }

        /// <summary>
        /// Product category (5th level) of the product cluster, represented in Google's product taxonomy.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categoryL5")]
        public virtual string CategoryL5 { get; set; }

        /// <summary>
        /// Tells whether the product cluster is `IN_STOCK` in your product feed across multiple countries,
        /// `OUT_OF_STOCK` in your product feed, or `NOT_IN_INVENTORY` at all. The field doesn't take the Best Sellers
        /// report country filter into account.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inventoryStatus")]
        public virtual string InventoryStatus { get; set; }

        /// <summary>Title of the product cluster.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; }

        /// <summary>GTINs of example variants of the product cluster.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variantGtins")]
        public virtual System.Collections.Generic.IList<string> VariantGtins { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// The estimated days to deliver a product after an order is placed. Only authorized shipping signals partners
    /// working with a merchant can use this resource. Merchants should use the
    /// [`products`](https://developers.google.com/shopping-content/reference/rest/v2.1/products#productshipping)
    /// resource instead.
    /// </summary>
    public class ProductDeliveryTime : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Required. A set of associations between `DeliveryArea` and `DeliveryTime` entries. The total number of
        /// `areaDeliveryTimes` can be at most 100.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("areaDeliveryTimes")]
        public virtual System.Collections.Generic.IList<ProductDeliveryTimeAreaDeliveryTime> AreaDeliveryTimes { get; set; }

        /// <summary>Required. The `id` of the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productId")]
        public virtual ProductId ProductId { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A pairing of `DeliveryArea` associated with a `DeliveryTime` for this product.</summary>
    public class ProductDeliveryTimeAreaDeliveryTime : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The delivery area associated with `deliveryTime` for this product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deliveryArea")]
        public virtual DeliveryArea DeliveryArea { get; set; }

        /// <summary>Required. The delivery time associated with `deliveryArea` for this product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deliveryTime")]
        public virtual ProductDeliveryTimeAreaDeliveryTimeDeliveryTime DeliveryTime { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A delivery time for this product.</summary>
    public class ProductDeliveryTimeAreaDeliveryTimeDeliveryTime : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Required. The maximum number of business days (inclusive) between when an order is placed and when the
        /// product ships. If a product ships in the same day, set this value to 0.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxHandlingTimeDays")]
        public virtual System.Nullable<int> MaxHandlingTimeDays { get; set; }

        /// <summary>
        /// Required. The maximum number of business days (inclusive) between when the product ships and when the
        /// product is delivered.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxTransitTimeDays")]
        public virtual System.Nullable<int> MaxTransitTimeDays { get; set; }

        /// <summary>
        /// Required. The minimum number of business days (inclusive) between when an order is placed and when the
        /// product ships. If a product ships in the same day, set this value to 0.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minHandlingTimeDays")]
        public virtual System.Nullable<int> MinHandlingTimeDays { get; set; }

        /// <summary>
        /// Required. The minimum number of business days (inclusive) between when the product ships and when the
        /// product is delivered.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minTransitTimeDays")]
        public virtual System.Nullable<int> MinTransitTimeDays { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ProductDimension : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The length units. Acceptable values are: - "`in`" - "`cm`" </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("unit")]
        public virtual string Unit { get; set; }

        /// <summary>
        /// Required. The length value represented as a number. The value can have a maximum precision of four decimal
        /// places.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual System.Nullable<double> Value { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The Content API ID of the product.</summary>
    public class ProductId : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The Content API ID of the product, in the form `channel:contentLanguage:targetCountry:offerId`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productId")]
        public virtual string ProductIdValue { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>An issue affecting specific product.</summary>
    public class ProductIssue : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// A list of actionable steps that can be executed to solve the issue. An example is requesting a re-review or
        /// providing arguments when merchant disagrees with the issue. Actions that are supported in (your) third-party
        /// application can be rendered as buttons and should be available to merchant when they expand the issue.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("actions")]
        public virtual System.Collections.Generic.IList<Action> Actions { get; set; }

        /// <summary>
        /// Clarifies the severity of the issue. The summarizing message, if present, should be shown right under the
        /// title for each issue. It helps merchants to quickly understand the impact of the issue. The detailed
        /// breakdown helps the merchant to fully understand the impact of the issue. It can be rendered as dialog that
        /// opens when the merchant mouse over the summarized impact statement. Issues with different severity can be
        /// styled differently. They may use a different color or icon to signal the difference between `ERROR`,
        /// `WARNING` and `INFO`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("impact")]
        public virtual ProductIssueImpact Impact { get; set; }

        /// <summary>
        /// Details of the issue as a pre-rendered HTML. HTML elements contain CSS classes that can be used to customize
        /// the style of the content. Always sanitize the HTML before embedding it directly to your application. The
        /// sanitizer needs to allow basic HTML tags, such as: `div`, `span`, `p`, `a`, `ul`, `li`, `table`, `tr`, `td`.
        /// For example, you can use [DOMPurify](https://www.npmjs.com/package/dompurify). CSS classes: * `issue-detail`
        /// - top level container for the detail of the issue * `callout-banners` - section of the `issue-detail` with
        /// callout banners * `callout-banner` - single callout banner, inside `callout-banners` * `callout-banner-info`
        /// - callout with important information (default) * `callout-banner-warning` - callout with a warning *
        /// `callout-banner-error` - callout informing about an error (most severe) * `issue-content` - section of the
        /// `issue-detail`, contains multiple `content-element` * `content-element` - content element such as a list,
        /// link or paragraph, inside `issue-content` * `root-causes` - unordered list with items describing root causes
        /// of the issue, inside `issue-content` * `root-causes-intro` - intro text before the `root-causes` list,
        /// inside `issue-content` * `segment` - section of the text, `span` inside paragraph * `segment-attribute` -
        /// section of the text that represents a product attribute, for example 'image\_link' * `segment-literal` -
        /// section of the text that contains a special value, for example '0-1000 kg' * `segment-bold` - section of the
        /// text that should be rendered as bold * `segment-italic` - section of the text that should be rendered as
        /// italic * `tooltip` - used on paragraphs that should be rendered with a tooltip. A section of the text in
        /// such a paragraph will have a class `tooltip-text` and is intended to be shown in a mouse over dialog. If the
        /// style is not used, the `tooltip-text` section would be shown on a new line, after the main part of the text.
        /// * `tooltip-text` - marks a section of the text within a `tooltip`, that is intended to be shown in a mouse
        /// over dialog. * `tooltip-icon` - marks a section of the text within a `tooltip`, that can be replaced with a
        /// tooltip icon, for example '?' or 'i'. By default, this section contains a `br` tag, that is separating the
        /// main text and the tooltip text when the style is not used. * `tooltip-style-question` - the tooltip shows
        /// helpful information, can use the '?' as an icon. * `tooltip-style-info` - the tooltip adds additional
        /// information fitting to the context, can use the 'i' as an icon. * `content-moderation` - marks the paragraph
        /// that explains how the issue was identified. * `list-intro` - marks the paragraph that contains an intro for
        /// a list. This paragraph will be always followed by a list. * `new-element` - Present for new elements added
        /// to the pre-rendered content in the future. To make sure that a new content element does not break your
        /// style, you can hide everything with this class.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("prerenderedContent")]
        public virtual string PrerenderedContent { get; set; }

        /// <summary>
        /// Pre-rendered HTML that contains a link to the external location where the ODS can be requested and
        /// instructions for how to request it. HTML elements contain CSS classes that can be used to customize the
        /// style of this snippet. Always sanitize the HTML before embedding it directly to your application. The
        /// sanitizer needs to allow basic HTML tags, such as: `div`, `span`, `p`, `a`, `ul`, `li`, `table`, `tr`, `td`.
        /// For example, you can use [DOMPurify](https://www.npmjs.com/package/dompurify). CSS classes: * `ods-section`*
        /// - wrapper around the out-of-court dispute resolution section * `ods-description`* - intro text for the
        /// out-of-court dispute resolution. It may contain multiple segments and a link. * `ods-param`* - wrapper
        /// around the header-value pair for parameters that merchant may need to provide during the ODS process. *
        /// `ods-routing-id`* - ods param for the Routing ID. * `ods-reference-id`* - ods param for the Routing ID. *
        /// `ods-param-header`* - header for the ODS parameter * `ods-param-value`* - value of the ODS parameter. This
        /// value should be rendered in a way that it is easy for merchants to identify and copy. * `segment` - section
        /// of the text, `span` inside paragraph * `segment-attribute` - section of the text that represents a product
        /// attribute, for example 'image\_link' * `segment-literal` - section of the text that contains a special
        /// value, for example '0-1000 kg' * `segment-bold` - section of the text that should be rendered as bold *
        /// `segment-italic` - section of the text that should be rendered as italic * `tooltip` - used on paragraphs
        /// that should be rendered with a tooltip. A section of the text in such a paragraph will have a class
        /// `tooltip-text` and is intended to be shown in a mouse over dialog. If the style is not used, the
        /// `tooltip-text` section would be shown on a new line, after the main part of the text. * `tooltip-text` -
        /// marks a section of the text within a `tooltip`, that is intended to be shown in a mouse over dialog. *
        /// `tooltip-icon` - marks a section of the text within a `tooltip`, that can be replaced with a tooltip icon,
        /// for example '?' or 'i'. By default, this section contains a `br` tag, that is separating the main text and
        /// the tooltip text when the style is not used. * `tooltip-style-question` - the tooltip shows helpful
        /// information, can use the '?' as an icon. * `tooltip-style-info` - the tooltip adds additional information
        /// fitting to the context, can use the 'i' as an icon.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("prerenderedOutOfCourtDisputeSettlement")]
        public virtual string PrerenderedOutOfCourtDisputeSettlement { get; set; }

        /// <summary>Title of the issue.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Overall impact of product issue.</summary>
    public class ProductIssueImpact : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Detailed impact breakdown. Explains the types of restriction the issue has in different shopping
        /// destinations and territory. If present, it should be rendered to the merchant. Can be shown as a mouse over
        /// dropdown or a dialog. Each breakdown item represents a group of regions with the same impact details.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("breakdowns")]
        public virtual System.Collections.Generic.IList<Breakdown> Breakdowns { get; set; }

        /// <summary>
        /// Optional. Message summarizing the overall impact of the issue. If present, it should be rendered to the
        /// merchant. For example: "Limits visibility in France"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("message")]
        public virtual string Message { get; set; }

        /// <summary>The severity of the issue.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("severity")]
        public virtual string Severity { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ProductProductDetail : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The name of the product detail.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("attributeName")]
        public virtual string AttributeName { get; set; }

        /// <summary>The value of the product detail.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("attributeValue")]
        public virtual string AttributeValue { get; set; }

        /// <summary>The section header used to group a set of product details.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sectionName")]
        public virtual string SectionName { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ProductShipping : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The CLDR territory code of the country to which an item will ship.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; }

        /// <summary>The location where the shipping is applicable, represented by a location group name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("locationGroupName")]
        public virtual string LocationGroupName { get; set; }

        /// <summary>
        /// The numeric ID of a location that the shipping rate applies to as defined in the Google Ads API.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("locationId")]
        public virtual System.Nullable<long> LocationId { get; set; }

        /// <summary>
        /// Maximum handling time (inclusive) between when the order is received and shipped in business days. 0 means
        /// that the order is shipped on the same day as it's received if it happens before the cut-off time. Both
        /// maxHandlingTime and maxTransitTime are required if providing shipping speeds.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxHandlingTime")]
        public virtual System.Nullable<long> MaxHandlingTime { get; set; }

        /// <summary>
        /// Maximum transit time (inclusive) between when the order has shipped and when it's delivered in business
        /// days. 0 means that the order is delivered on the same day as it ships. Both maxHandlingTime and
        /// maxTransitTime are required if providing shipping speeds.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxTransitTime")]
        public virtual System.Nullable<long> MaxTransitTime { get; set; }

        /// <summary>
        /// Minimum handling time (inclusive) between when the order is received and shipped in business days. 0 means
        /// that the order is shipped on the same day as it's received if it happens before the cut-off time.
        /// minHandlingTime can only be present together with maxHandlingTime; but it's not required if maxHandlingTime
        /// is present.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minHandlingTime")]
        public virtual System.Nullable<long> MinHandlingTime { get; set; }

        /// <summary>
        /// Minimum transit time (inclusive) between when the order has shipped and when it's delivered in business
        /// days. 0 means that the order is delivered on the same day as it ships. minTransitTime can only be present
        /// together with maxTransitTime; but it's not required if maxTransitTime is present.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minTransitTime")]
        public virtual System.Nullable<long> MinTransitTime { get; set; }

        /// <summary>
        /// The postal code range that the shipping rate applies to, represented by a postal code, a postal code prefix
        /// followed by a * wildcard, a range between two postal codes or two postal code prefixes of equal length.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("postalCode")]
        public virtual string PostalCode { get; set; }

        /// <summary>Fixed shipping price, represented as a number.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("price")]
        public virtual Price Price { get; set; }

        /// <summary>The geographic region to which a shipping rate applies.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("region")]
        public virtual string Region { get; set; }

        /// <summary>A free-form description of the service class or delivery speed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("service")]
        public virtual string Service { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ProductShippingDimension : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The unit of value.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("unit")]
        public virtual string Unit { get; set; }

        /// <summary>The dimension of the product used to calculate the shipping cost of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual System.Nullable<double> Value { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ProductShippingWeight : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The unit of value.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("unit")]
        public virtual string Unit { get; set; }

        /// <summary>The weight of the product used to calculate the shipping cost of the item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual System.Nullable<double> Value { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The status of a product, that is, information about a product computed asynchronously.</summary>
    public class ProductStatus : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Date on which the item has been created, in ISO 8601 format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("creationDate")]
        public virtual string CreationDate { get; set; }

        /// <summary>The intended destinations for the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("destinationStatuses")]
        public virtual System.Collections.Generic.IList<ProductStatusDestinationStatus> DestinationStatuses { get; set; }

        /// <summary>Date on which the item expires in Google Shopping, in ISO 8601 format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("googleExpirationDate")]
        public virtual string GoogleExpirationDate { get; set; }

        /// <summary>A list of all issues associated with the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemLevelIssues")]
        public virtual System.Collections.Generic.IList<ProductStatusItemLevelIssue> ItemLevelIssues { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#productStatus`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>Date on which the item has been last updated, in ISO 8601 format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("lastUpdateDate")]
        public virtual string LastUpdateDate { get; set; }

        /// <summary>The link to the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("link")]
        public virtual string Link { get; set; }

        /// <summary>The ID of the product for which status is reported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productId")]
        public virtual string ProductId { get; set; }

        /// <summary>The title of the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ProductStatusDestinationStatus : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>List of country codes (ISO 3166-1 alpha-2) where the offer is approved.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("approvedCountries")]
        public virtual System.Collections.Generic.IList<string> ApprovedCountries { get; set; }

        /// <summary>The name of the destination</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("destination")]
        public virtual string Destination { get; set; }

        /// <summary>List of country codes (ISO 3166-1 alpha-2) where the offer is disapproved.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("disapprovedCountries")]
        public virtual System.Collections.Generic.IList<string> DisapprovedCountries { get; set; }

        /// <summary>List of country codes (ISO 3166-1 alpha-2) where the offer is pending approval.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pendingCountries")]
        public virtual System.Collections.Generic.IList<string> PendingCountries { get; set; }

        /// <summary>Deprecated. Destination approval status in `targetCountry` of the offer.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ProductStatusItemLevelIssue : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>List of country codes (ISO 3166-1 alpha-2) where issue applies to the offer.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("applicableCountries")]
        public virtual System.Collections.Generic.IList<string> ApplicableCountries { get; set; }

        /// <summary>The attribute's name, if the issue is caused by a single attribute.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("attributeName")]
        public virtual string AttributeName { get; set; }

        /// <summary>The error code of the issue.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("code")]
        public virtual string Code { get; set; }

        /// <summary>A short issue description in English.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; }

        /// <summary>The destination the issue applies to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("destination")]
        public virtual string Destination { get; set; }

        /// <summary>A detailed issue description in English.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("detail")]
        public virtual string Detail { get; set; }

        /// <summary>The URL of a web page to help with resolving this issue.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("documentation")]
        public virtual string Documentation { get; set; }

        /// <summary>Whether the issue can be resolved by the merchant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("resolution")]
        public virtual string Resolution { get; set; }

        /// <summary>How this issue affects serving of the offer.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("servability")]
        public virtual string Servability { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Structured description, for algorithmically (AI)-generated descriptions. See
    /// [description](https://support.google.com/merchants/answer/6324468#When_to_use) for more information.
    /// </summary>
    public class ProductStructuredDescription : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The description text. Maximum length is 5000 characters.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("content")]
        public virtual string Content { get; set; }

        /// <summary>
        /// Optional. The digital source type. Acceptable values are: - "`trained_algorithmic_media`" - "`default`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("digitalSourceType")]
        public virtual string DigitalSourceType { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Structured title, for algorithmically (AI)-generated titles. See
    /// [title](https://support.google.com/merchants/answer/6324415#Whentouse) for more information.
    /// </summary>
    public class ProductStructuredTitle : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The title text. Maximum length is 150 characters.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("content")]
        public virtual string Content { get; set; }

        /// <summary>
        /// Optional. The digital source type. Acceptable values are: - "`trained_algorithmic_media`" - "`default`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("digitalSourceType")]
        public virtual string DigitalSourceType { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ProductSubscriptionCost : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The amount the buyer has to pay per subscription period.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("amount")]
        public virtual Price Amount { get; set; }

        /// <summary>The type of subscription period. - "`month`" - "`year`" </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("period")]
        public virtual string Period { get; set; }

        /// <summary>The number of subscription periods the buyer has to pay.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("periodLength")]
        public virtual System.Nullable<long> PeriodLength { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Information regarding sustainability related incentive programs such as rebates or tax relief.
    /// </summary>
    public class ProductSustainabilityIncentive : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Optional. The fixed amount of the incentive.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("amount")]
        public virtual Price Amount { get; set; }

        /// <summary>Optional. The percentage of the sale price that the incentive is applied to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("percentage")]
        public virtual System.Nullable<double> Percentage { get; set; }

        /// <summary>Required. Sustainability incentive program.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ProductTax : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The country within which the item is taxed, specified as a CLDR territory code.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("country")]
        public virtual string Country { get; set; }

        /// <summary>
        /// The numeric ID of a location that the tax rate applies to as defined in the Google Ads API.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("locationId")]
        public virtual System.Nullable<long> LocationId { get; set; }

        /// <summary>
        /// The postal code range that the tax rate applies to, represented by a ZIP code, a ZIP code prefix using *
        /// wildcard, a range between two ZIP codes or two ZIP code prefixes of equal length. Examples: 94114, 94*,
        /// 94002-95460, 94*-95*.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("postalCode")]
        public virtual string PostalCode { get; set; }

        /// <summary>The percentage of tax rate that applies to the item price.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rate")]
        public virtual System.Nullable<double> Rate { get; set; }

        /// <summary>The geographic region to which the tax rate applies.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("region")]
        public virtual string Region { get; set; }

        /// <summary>Should be set to true if tax is charged on shipping.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("taxShip")]
        public virtual System.Nullable<bool> TaxShip { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ProductUnitPricingBaseMeasure : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The unit of the denominator.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("unit")]
        public virtual string Unit { get; set; }

        /// <summary>The denominator of the unit price.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual System.Nullable<long> Value { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ProductUnitPricingMeasure : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The unit of the measure.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("unit")]
        public virtual string Unit { get; set; }

        /// <summary>The measure of an item.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual System.Nullable<double> Value { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Product fields. Values are only set for fields requested explicitly in the request's search query.
    /// </summary>
    public class ProductView : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Aggregated destination status.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("aggregatedDestinationStatus")]
        public virtual string AggregatedDestinationStatus { get; set; }

        /// <summary>Availability of the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("availability")]
        public virtual string Availability { get; set; }

        /// <summary>Brand of the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("brand")]
        public virtual string Brand { get; set; }

        /// <summary>
        /// First level of the product category in [Google's product
        /// taxonomy](https://support.google.com/merchants/answer/6324436).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categoryL1")]
        public virtual string CategoryL1 { get; set; }

        /// <summary>
        /// Second level of the product category in [Google's product
        /// taxonomy](https://support.google.com/merchants/answer/6324436).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categoryL2")]
        public virtual string CategoryL2 { get; set; }

        /// <summary>
        /// Third level of the product category in [Google's product
        /// taxonomy](https://support.google.com/merchants/answer/6324436).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categoryL3")]
        public virtual string CategoryL3 { get; set; }

        /// <summary>
        /// Fourth level of the product category in [Google's product
        /// taxonomy](https://support.google.com/merchants/answer/6324436).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categoryL4")]
        public virtual string CategoryL4 { get; set; }

        /// <summary>
        /// Fifth level of the product category in [Google's product
        /// taxonomy](https://support.google.com/merchants/answer/6324436).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categoryL5")]
        public virtual string CategoryL5 { get; set; }

        /// <summary>Channel of the product (online versus local).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("channel")]
        public virtual string Channel { get; set; }

        /// <summary>Estimated performance potential compared to highest performing products of the merchant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("clickPotential")]
        public virtual string ClickPotential { get; set; }

        /// <summary>
        /// Rank of the product based on its click potential. A product with `click_potential_rank` 1 has the highest
        /// click potential among the merchant's products that fulfill the search query conditions.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("clickPotentialRank")]
        public virtual System.Nullable<long> ClickPotentialRank { get; set; }

        /// <summary>Condition of the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("condition")]
        public virtual string Condition { get; set; }

        private string _creationTimeRaw;

        private object _creationTime;

        /// <summary>The time the merchant created the product in timestamp seconds.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("creationTime")]
        public virtual string CreationTimeRaw
        {
            get => _creationTimeRaw;
            set
            {
                _creationTime = Google.Apis.Util.Utilities.DeserializeForGoogleFormat(value);
                _creationTimeRaw = value;
            }
        }

        /// <summary><seealso cref="object"/> representation of <see cref="CreationTimeRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnoreAttribute]
        [System.ObsoleteAttribute("This property is obsolete and may behave unexpectedly; please use CreationTimeDateTimeOffset instead.")]
        public virtual object CreationTime
        {
            get => _creationTime;
            set
            {
                _creationTimeRaw = Google.Apis.Util.Utilities.SerializeForGoogleFormat(value);
                _creationTime = value;
            }
        }

        /// <summary><seealso cref="System.DateTimeOffset"/> representation of <see cref="CreationTimeRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnoreAttribute]
        public virtual System.DateTimeOffset? CreationTimeDateTimeOffset
        {
            get => Google.Apis.Util.DiscoveryFormat.ParseGoogleDateTimeToDateTimeOffset(CreationTimeRaw);
            set => CreationTimeRaw = Google.Apis.Util.DiscoveryFormat.FormatDateTimeOffsetToGoogleDateTime(value);
        }

        /// <summary>
        /// Product price currency code (for example, ISO 4217). Absent if product price is not available.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("currencyCode")]
        public virtual string CurrencyCode { get; set; }

        /// <summary>Expiration date for the product. Specified on insertion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("expirationDate")]
        public virtual Date ExpirationDate { get; set; }

        /// <summary>GTIN of the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gtin")]
        public virtual System.Collections.Generic.IList<string> Gtin { get; set; }

        /// <summary>
        /// The REST ID of the product, in the form of channel:contentLanguage:targetCountry:offerId. Content API
        /// methods that operate on products take this as their productId parameter. Should always be included in the
        /// SELECT clause.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; }

        /// <summary>Item group ID provided by the merchant for grouping variants together.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemGroupId")]
        public virtual string ItemGroupId { get; set; }

        /// <summary>List of item issues for the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemIssues")]
        public virtual System.Collections.Generic.IList<ProductViewItemIssue> ItemIssues { get; set; }

        /// <summary>Language code of the product in BCP 47 format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("languageCode")]
        public virtual string LanguageCode { get; set; }

        /// <summary>Merchant-provided id of the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("offerId")]
        public virtual string OfferId { get; set; }

        /// <summary>
        /// Product price specified as micros (1 millionth of a standard unit, 1 USD = 1000000 micros) in the product
        /// currency. Absent in case the information about the price of the product is not available.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("priceMicros")]
        public virtual System.Nullable<long> PriceMicros { get; set; }

        /// <summary>
        /// First level of the product type in merchant's own [product
        /// taxonomy](https://support.google.com/merchants/answer/6324436).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productTypeL1")]
        public virtual string ProductTypeL1 { get; set; }

        /// <summary>
        /// Second level of the product type in merchant's own [product
        /// taxonomy](https://support.google.com/merchants/answer/6324436).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productTypeL2")]
        public virtual string ProductTypeL2 { get; set; }

        /// <summary>
        /// Third level of the product type in merchant's own [product
        /// taxonomy](https://support.google.com/merchants/answer/6324436).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productTypeL3")]
        public virtual string ProductTypeL3 { get; set; }

        /// <summary>
        /// Fourth level of the product type in merchant's own [product
        /// taxonomy](https://support.google.com/merchants/answer/6324436).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productTypeL4")]
        public virtual string ProductTypeL4 { get; set; }

        /// <summary>
        /// Fifth level of the product type in merchant's own [product
        /// taxonomy](https://support.google.com/merchants/answer/6324436).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productTypeL5")]
        public virtual string ProductTypeL5 { get; set; }

        /// <summary>The normalized shipping label specified in the feed</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippingLabel")]
        public virtual string ShippingLabel { get; set; }

        /// <summary>Title of the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Item issue associated with the product.</summary>
    public class ProductViewItemIssue : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Item issue type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("issueType")]
        public virtual ProductViewItemIssueItemIssueType IssueType { get; set; }

        /// <summary>Item issue resolution.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("resolution")]
        public virtual string Resolution { get; set; }

        /// <summary>Item issue severity.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("severity")]
        public virtual ProductViewItemIssueItemIssueSeverity Severity { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Issue severity for all affected regions in a destination.</summary>
    public class ProductViewItemIssueIssueSeverityPerDestination : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>List of demoted countries in the destination.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("demotedCountries")]
        public virtual System.Collections.Generic.IList<string> DemotedCountries { get; set; }

        /// <summary>Issue destination.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("destination")]
        public virtual string Destination { get; set; }

        /// <summary>List of disapproved countries in the destination.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("disapprovedCountries")]
        public virtual System.Collections.Generic.IList<string> DisapprovedCountries { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Severity of an issue per destination in a region, and aggregated severity.</summary>
    public class ProductViewItemIssueItemIssueSeverity : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Severity of an issue aggregated for destination.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("aggregatedSeverity")]
        public virtual string AggregatedSeverity { get; set; }

        /// <summary>Item issue severity for every destination.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("severityPerDestination")]
        public virtual System.Collections.Generic.IList<ProductViewItemIssueIssueSeverityPerDestination> SeverityPerDestination { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Type of the item issue.</summary>
    public class ProductViewItemIssueItemIssueType : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Canonical attribute name for attribute-specific issues.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("canonicalAttribute")]
        public virtual string CanonicalAttribute { get; set; }

        /// <summary>Error code of the issue.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("code")]
        public virtual string Code { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ProductWeight : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The weight unit. Acceptable values are: - "`g`" - "`kg`" - "`oz`" - "`lb`" </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("unit")]
        public virtual string Unit { get; set; }

        /// <summary>
        /// Required. The weight represented as a number. The weight can have a maximum precision of four decimal
        /// places.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual System.Nullable<double> Value { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ProductsCustomBatchRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The request entries to be processed in the batch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<ProductsCustomBatchRequestEntry> Entries { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A batch entry encoding a single non-batch products request.</summary>
    public class ProductsCustomBatchRequestEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>An entry ID, unique within the batch request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>
        /// The Content API Supplemental Feed ID. If present then product insertion or deletion applies to a
        /// supplemental feed instead of primary Content API feed.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("feedId")]
        public virtual System.Nullable<ulong> FeedId { get; set; }

        /// <summary>The ID of the managing account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("merchantId")]
        public virtual System.Nullable<ulong> MerchantId { get; set; }

        /// <summary>
        /// The method of the batch entry. Acceptable values are: - "`delete`" - "`get`" - "`insert`" - "`update`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("method")]
        public virtual string Method { get; set; }

        /// <summary>
        /// The product to insert or update. Only required if the method is `insert` or `update`. If the `update` method
        /// is used with `updateMask` only to delete a field, then this isn't required. For example, setting `salePrice`
        /// on the `updateMask` and not providing a `product` will result in an existing sale price on the product
        /// specified by `productId` being deleted.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("product")]
        public virtual Product Product { get; set; }

        /// <summary>
        /// The ID of the product to get or mutate. Only defined if the method is `get`, `delete`, or `update`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productId")]
        public virtual string ProductId { get; set; }

        /// <summary>
        /// The comma-separated list of product attributes to be updated. Example: `"title,salePrice"`. Attributes
        /// specified in the update mask without a value specified in the body will be deleted from the product. *You
        /// must specify the update mask to delete attributes.* Only top-level product attributes can be updated. If not
        /// defined, product attributes with set values will be updated and other attributes will stay unchanged. Only
        /// defined if the method is `update`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updateMask")]
        public virtual object UpdateMask { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ProductsCustomBatchResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The result of the execution of the batch requests.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<ProductsCustomBatchResponseEntry> Entries { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#productsCustomBatchResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A batch entry encoding a single non-batch products response.</summary>
    public class ProductsCustomBatchResponseEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the request entry this entry responds to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>
        /// A list of errors for failed custombatch entries. *Note:* Schema errors fail the whole request.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("errors")]
        public virtual Errors Errors { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#productsCustomBatchResponseEntry`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>
        /// The inserted product. Only defined if the method is `insert` and if the request was successful.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("product")]
        public virtual Product Product { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ProductsListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#productsListResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The token for the retrieval of the next page of products.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        [Newtonsoft.Json.JsonPropertyAttribute("resources")]
        public virtual System.Collections.Generic.IList<Product> Resources { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ProductstatusesCustomBatchRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The request entries to be processed in the batch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<ProductstatusesCustomBatchRequestEntry> Entries { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A batch entry encoding a single non-batch productstatuses request.</summary>
    public class ProductstatusesCustomBatchRequestEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>An entry ID, unique within the batch request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>
        /// If set, only issues for the specified destinations are returned, otherwise only issues for the Shopping
        /// destination.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("destinations")]
        public virtual System.Collections.Generic.IList<string> Destinations { get; set; }

        /// <summary>Deprecated: Setting this field has no effect and attributes are never included.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("includeAttributes")]
        public virtual System.Nullable<bool> IncludeAttributes { get; set; }

        /// <summary>The ID of the managing account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("merchantId")]
        public virtual System.Nullable<ulong> MerchantId { get; set; }

        /// <summary>The method of the batch entry. Acceptable values are: - "`get`" </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("method")]
        public virtual string Method { get; set; }

        /// <summary>The ID of the product whose status to get.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productId")]
        public virtual string ProductId { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ProductstatusesCustomBatchResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The result of the execution of the batch requests.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<ProductstatusesCustomBatchResponseEntry> Entries { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#productstatusesCustomBatchResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A batch entry encoding a single non-batch productstatuses response.</summary>
    public class ProductstatusesCustomBatchResponseEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the request entry this entry responds to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>
        /// A list of errors for failed custombatch entries. *Note:* Schema errors fail the whole request.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("errors")]
        public virtual Errors Errors { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#productstatusesCustomBatchResponseEntry`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The requested product status. Only defined if the request was successful.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productStatus")]
        public virtual ProductStatus ProductStatus { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ProductstatusesListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#productstatusesListResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The token for the retrieval of the next page of products statuses.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        [Newtonsoft.Json.JsonPropertyAttribute("resources")]
        public virtual System.Collections.Generic.IList<ProductStatus> Resources { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Represents a promotion. See the following articles for more details. * [Promotions feed
    /// specification](https://support.google.com/merchants/answer/2906014) * [Local promotions feed
    /// specification](https://support.google.com/merchants/answer/10146130) * [Promotions on Buy on Google product data
    /// specification](https://support.google.com/merchants/answer/9173673)
    /// </summary>
    public class Promotion : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Product filter by brand for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("brand")]
        public virtual System.Collections.Generic.IList<string> Brand { get; set; }

        /// <summary>Product filter by brand exclusion for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("brandExclusion")]
        public virtual System.Collections.Generic.IList<string> BrandExclusion { get; set; }

        /// <summary>
        /// Required. The content language used as part of the unique identifier. `en` content language is available for
        /// all target countries. `fr` content language is available for `CA` and `FR` target countries. `de` content
        /// language is available for `DE` target country. `nl` content language is available for `NL` target country.
        /// `it` content language is available for `IT` target country. `pt` content language is available for `BR`
        /// target country. `ja` content language is available for `JP` target country. `ko` content language is
        /// available for `KR` target country.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contentLanguage")]
        public virtual string ContentLanguage { get; set; }

        /// <summary>Required. Coupon value type for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("couponValueType")]
        public virtual string CouponValueType { get; set; }

        /// <summary>
        /// The custom redemption restriction for the promotion. If the `redemption_restriction` field is set to
        /// `CUSTOM`, this field must be set.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customRedemptionRestriction")]
        public virtual string CustomRedemptionRestriction { get; set; }

        /// <summary>Free gift description for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("freeGiftDescription")]
        public virtual string FreeGiftDescription { get; set; }

        /// <summary>Free gift item ID for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("freeGiftItemId")]
        public virtual string FreeGiftItemId { get; set; }

        /// <summary>Free gift value for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("freeGiftValue")]
        public virtual PriceAmount FreeGiftValue { get; set; }

        /// <summary>Generic redemption code for the promotion. To be used with the `offerType` field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("genericRedemptionCode")]
        public virtual string GenericRedemptionCode { get; set; }

        /// <summary>The number of items discounted in the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("getThisQuantityDiscounted")]
        public virtual System.Nullable<int> GetThisQuantityDiscounted { get; set; }

        /// <summary>
        /// Output only. The REST promotion ID to uniquely identify the promotion. Content API methods that operate on
        /// promotions take this as their `promotionId` parameter. The REST ID for a promotion is of the form
        /// channel:contentLanguage:targetCountry:promotionId The `channel` field has a value of `"online"`,
        /// `"in_store"`, or `"online_in_store"`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; }

        /// <summary>Product filter by item group ID for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemGroupId")]
        public virtual System.Collections.Generic.IList<string> ItemGroupId { get; set; }

        /// <summary>Product filter by item group ID exclusion for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemGroupIdExclusion")]
        public virtual System.Collections.Generic.IList<string> ItemGroupIdExclusion { get; set; }

        /// <summary>Product filter by item ID for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemId")]
        public virtual System.Collections.Generic.IList<string> ItemId { get; set; }

        /// <summary>Product filter by item ID exclusion for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemIdExclusion")]
        public virtual System.Collections.Generic.IList<string> ItemIdExclusion { get; set; }

        /// <summary>Maximum purchase quantity for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("limitQuantity")]
        public virtual System.Nullable<int> LimitQuantity { get; set; }

        /// <summary>Maximum purchase value for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("limitValue")]
        public virtual PriceAmount LimitValue { get; set; }

        /// <summary>Required. Long title for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("longTitle")]
        public virtual string LongTitle { get; set; }

        /// <summary>
        /// The maximum monetary discount a customer can receive for the promotion. This field is only supported with
        /// the `Percent off` coupon value type.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxDiscountAmount")]
        public virtual PriceAmount MaxDiscountAmount { get; set; }

        /// <summary>Minimum purchase amount for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minimumPurchaseAmount")]
        public virtual PriceAmount MinimumPurchaseAmount { get; set; }

        /// <summary>Minimum purchase quantity for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minimumPurchaseQuantity")]
        public virtual System.Nullable<int> MinimumPurchaseQuantity { get; set; }

        /// <summary>Cost cap for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("moneyBudget")]
        public virtual PriceAmount MoneyBudget { get; set; }

        /// <summary>The money off amount offered in the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("moneyOffAmount")]
        public virtual PriceAmount MoneyOffAmount { get; set; }

        /// <summary>Required. Type of the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("offerType")]
        public virtual string OfferType { get; set; }

        /// <summary>Order limit for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("orderLimit")]
        public virtual System.Nullable<int> OrderLimit { get; set; }

        /// <summary>The percentage discount offered in the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("percentOff")]
        public virtual System.Nullable<int> PercentOff { get; set; }

        /// <summary>
        /// Required. Applicability of the promotion to either all products or only specific products.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productApplicability")]
        public virtual string ProductApplicability { get; set; }

        /// <summary>Product filter by product type for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productType")]
        public virtual System.Collections.Generic.IList<string> ProductType { get; set; }

        /// <summary>Product filter by product type exclusion for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productTypeExclusion")]
        public virtual System.Collections.Generic.IList<string> ProductTypeExclusion { get; set; }

        /// <summary>Destination ID for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("promotionDestinationIds")]
        public virtual System.Collections.Generic.IList<string> PromotionDestinationIds { get; set; }

        /// <summary>
        /// String representation of the promotion display dates. Deprecated. Use `promotion_display_time_period`
        /// instead.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("promotionDisplayDates")]
        public virtual string PromotionDisplayDates { get; set; }

        /// <summary>`TimePeriod` representation of the promotion's display dates.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("promotionDisplayTimePeriod")]
        public virtual TimePeriod PromotionDisplayTimePeriod { get; set; }

        /// <summary>
        /// String representation of the promotion effective dates. Deprecated. Use `promotion_effective_time_period`
        /// instead.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("promotionEffectiveDates")]
        public virtual string PromotionEffectiveDates { get; set; }

        /// <summary>Required. `TimePeriod` representation of the promotion's effective dates.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("promotionEffectiveTimePeriod")]
        public virtual TimePeriod PromotionEffectiveTimePeriod { get; set; }

        /// <summary>Required. The user provided promotion ID to uniquely identify the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("promotionId")]
        public virtual string PromotionId { get; set; }

        /// <summary>Output only. The current status of the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("promotionStatus")]
        public virtual PromotionPromotionStatus PromotionStatus { get; set; }

        /// <summary>
        /// URL to the page on the merchant's site where the promotion shows. Local Inventory ads promotions throw an
        /// error if no promo url is included. URL is used to confirm that the promotion is valid and can be redeemed.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("promotionUrl")]
        public virtual string PromotionUrl { get; set; }

        /// <summary>Required. Redemption channel for the promotion. At least one channel is required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("redemptionChannel")]
        public virtual System.Collections.Generic.IList<string> RedemptionChannel { get; set; }

        /// <summary>The redemption restriction for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("redemptionRestriction")]
        public virtual string RedemptionRestriction { get; set; }

        /// <summary>Shipping service names for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippingServiceNames")]
        public virtual System.Collections.Generic.IList<string> ShippingServiceNames { get; set; }

        /// <summary>
        /// Whether the promotion applies to all stores, or only specified stores. Local Inventory ads promotions throw
        /// an error if no store applicability is included. An INVALID_ARGUMENT error is thrown if store_applicability
        /// is set to ALL_STORES and store_code or score_code_exclusion is set to a value.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeApplicability")]
        public virtual string StoreApplicability { get; set; }

        /// <summary>Store codes to include for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeCode")]
        public virtual System.Collections.Generic.IList<string> StoreCode { get; set; }

        /// <summary>Store codes to exclude for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeCodeExclusion")]
        public virtual System.Collections.Generic.IList<string> StoreCodeExclusion { get; set; }

        /// <summary>
        /// Required. The target country used as part of the unique identifier. Can be `AU`, `CA`, `DE`, `FR`, `GB`,
        /// `IN`, `US`, `BR`, `ES`, `NL`, `JP`, `IT` or `KR`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetCountry")]
        public virtual string TargetCountry { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The status of the promotion.</summary>
    public class PromotionPromotionStatus : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Date on which the promotion has been created in [ISO 8601](http://en.wikipedia.org/wiki/ISO_8601) format:
        /// Date, time, and offset, for example "2020-01-02T09:00:00+01:00" or "2020-01-02T09:00:00Z"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("creationDate")]
        public virtual string CreationDate { get; set; }

        /// <summary>The intended destinations for the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("destinationStatuses")]
        public virtual System.Collections.Generic.IList<PromotionPromotionStatusDestinationStatus> DestinationStatuses { get; set; }

        /// <summary>
        /// Date on which the promotion status has been last updated in [ISO
        /// 8601](http://en.wikipedia.org/wiki/ISO_8601) format: Date, time, and offset, for example
        /// "2020-01-02T09:00:00+01:00" or "2020-01-02T09:00:00Z"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("lastUpdateDate")]
        public virtual string LastUpdateDate { get; set; }

        /// <summary>A list of issues associated with the promotion.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("promotionIssue")]
        public virtual System.Collections.Generic.IList<PromotionPromotionStatusPromotionIssue> PromotionIssue { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The destination status of the promotion.</summary>
    public class PromotionPromotionStatusDestinationStatus : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The name of the destination.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("destination")]
        public virtual string Destination { get; set; }

        /// <summary>The status for the specified destination.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The issue associated with the promotion.</summary>
    public class PromotionPromotionStatusPromotionIssue : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Code of the issue.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("code")]
        public virtual string Code { get; set; }

        /// <summary>Explanation of the issue.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("detail")]
        public virtual string Detail { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Settings for Pub/Sub notifications, all methods require that the caller is a direct user of the merchant center
    /// account.
    /// </summary>
    public class PubsubNotificationSettings : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Cloud pub/sub topic to which notifications are sent (read-only).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cloudTopicName")]
        public virtual string CloudTopicName { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#pubsubNotificationSettings`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>List of event types. Acceptable values are: - "`orderPendingShipment`" </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("registeredEvents")]
        public virtual System.Collections.Generic.IList<string> RegisteredEvents { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class RateGroup : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// A list of shipping labels defining the products to which this rate group applies to. This is a disjunction:
        /// only one of the labels has to match for the rate group to apply. May only be empty for the last rate group
        /// of a service. Required.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("applicableShippingLabels")]
        public virtual System.Collections.Generic.IList<string> ApplicableShippingLabels { get; set; }

        /// <summary>A list of carrier rates that can be referred to by `mainTable` or `singleValue`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("carrierRates")]
        public virtual System.Collections.Generic.IList<CarrierRate> CarrierRates { get; set; }

        /// <summary>
        /// A table defining the rate group, when `singleValue` is not expressive enough. Can only be set if
        /// `singleValue` is not set.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("mainTable")]
        public virtual Table MainTable { get; set; }

        /// <summary>Name of the rate group. Optional. If set has to be unique within shipping service.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        /// <summary>
        /// The value of the rate group (for example, flat rate $10). Can only be set if `mainTable` and `subtables` are
        /// not set.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("singleValue")]
        public virtual Value SingleValue { get; set; }

        /// <summary>A list of subtables referred to by `mainTable`. Can only be set if `mainTable` is set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("subtables")]
        public virtual System.Collections.Generic.IList<Table> Subtables { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Recommendations are suggested ways to improve your merchant account's performance. For example, to engage with a
    /// feature, or start using a new Google product.
    /// </summary>
    public class Recommendation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Output only. CTAs of this recommendation. Repeated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("additionalCallToAction")]
        public virtual System.Collections.Generic.IList<RecommendationCallToAction> AdditionalCallToAction { get; set; }

        /// <summary>
        /// Output only. List of additional localized descriptions for a recommendation. Localication uses the
        /// `languageCode` field in `GenerateRecommendations` requests. Not all description types are guaranteed to be
        /// present and we recommend to rely on default description.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("additionalDescriptions")]
        public virtual System.Collections.Generic.IList<RecommendationDescription> AdditionalDescriptions { get; set; }

        /// <summary>Output only. Any creatives attached to the recommendation. Repeated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("creative")]
        public virtual System.Collections.Generic.IList<RecommendationCreative> Creative { get; set; }

        /// <summary>Optional. Default CTA of the recommendation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("defaultCallToAction")]
        public virtual RecommendationCallToAction DefaultCallToAction { get; set; }

        /// <summary>
        /// Optional. Localized recommendation description. The localization the {@link
        /// `GenerateRecommendationsRequest.language_code`} field in {@link `GenerateRecommendationsRequest`} requests.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("defaultDescription")]
        public virtual string DefaultDescription { get; set; }

        /// <summary>
        /// Optional. A numerical score of the impact from the recommendation's description. For example, a
        /// recommendation might suggest an upward trend in sales for a certain product. Higher number means larger
        /// impact.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("numericalImpact")]
        public virtual System.Nullable<int> NumericalImpact { get; set; }

        /// <summary>
        /// Optional. Indicates whether a user needs to pay when they complete the user journey suggested by the
        /// recommendation.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("paid")]
        public virtual System.Nullable<bool> Paid { get; set; }

        /// <summary>
        /// Optional. Localized recommendation name. The localization uses the {@link
        /// `GenerateRecommendationsRequest.language_code`} field in {@link `GenerateRecommendationsRequest`} requests.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("recommendationName")]
        public virtual string RecommendationName { get; set; }

        /// <summary>
        /// Optional. Subtype of the recommendations. Only applicable when multiple recommendations can be generated per
        /// type, and is used as an identifier of recommendation under the same recommendation type.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("subType")]
        public virtual string SubType { get; set; }

        /// <summary>
        /// Optional. Localized Recommendation Title. Localization uses the {@link
        /// `GenerateRecommendationsRequest.language_code`} field in {@link `GenerateRecommendationsRequest`} requests.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; }

        /// <summary>
        /// Output only. Type of the recommendation. List of currently available recommendation types: -
        /// OPPORTUNITY_CREATE_NEW_COLLECTION - OPPORTUNITY_CREATE_EMAIL_CAMPAIGN
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Call to action (CTA) that explains how a merchant can implement this recommendation</summary>
    public class RecommendationCallToAction : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Output only. Intent of the action. This value describes the intent (for example,
        /// `OPEN_CREATE_EMAIL_CAMPAIGN_FLOW`) and can vary from recommendation to recommendation. This value can change
        /// over time for the same recommendation. Currently available intent values: - OPEN_CREATE_EMAIL_CAMPAIGN_FLOW:
        /// Opens a user journey where they can create a marketing email campaign. (No default URL) -
        /// OPEN_CREATE_COLLECTION_TAB: Opens a user journey where they can [create a
        /// collection](https://support.google.com/merchants/answer/9703228) for their Merchant account. (No default
        /// URL)
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("intent")]
        public virtual string Intent { get; set; }

        /// <summary>Output only. Localized text of the CTA. Optional.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("localizedText")]
        public virtual string LocalizedText { get; set; }

        /// <summary>
        /// Optional. URL of the CTA. This field will only be set for some recommendations where there is a suggested
        /// landing URL. Otherwise it will be set to an empty string. We recommend developers to use their own custom
        /// landing page according to the description of the intent field above when this uri field is empty.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("uri")]
        public virtual string Uri { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Creative is a multimedia attachment to recommendation that can be used on the frontend.</summary>
    public class RecommendationCreative : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Type of the creative.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; }

        /// <summary>URL of the creative.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("uri")]
        public virtual string Uri { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Google-provided description for the recommendation.</summary>
    public class RecommendationDescription : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Output only. Text of the description.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("text")]
        public virtual string Text { get; set; }

        /// <summary>Output only. Type of the description.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Represents a geographic region that you can use as a target with both the `RegionalInventory` and
    /// `ShippingSettings` services. You can define regions as collections of either postal codes or, in some countries,
    /// using predefined geotargets.
    /// </summary>
    public class Region : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The display name of the region.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("displayName")]
        public virtual string DisplayName { get; set; }

        /// <summary>A list of geotargets that defines the region area.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("geotargetArea")]
        public virtual RegionGeoTargetArea GeotargetArea { get; set; }

        /// <summary>Output only. Immutable. Merchant that owns the region.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("merchantId")]
        public virtual System.Nullable<long> MerchantId { get; set; }

        /// <summary>A list of postal codes that defines the region area.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("postalCodeArea")]
        public virtual RegionPostalCodeArea PostalCodeArea { get; set; }

        /// <summary>Output only. Immutable. The ID uniquely identifying each region.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("regionId")]
        public virtual string RegionId { get; set; }

        /// <summary>
        /// Output only. Indicates if the region is eligible to use in the Regional Inventory configuration.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("regionalInventoryEligible")]
        public virtual System.Nullable<bool> RegionalInventoryEligible { get; set; }

        /// <summary>
        /// Output only. Indicates if the region is eligible to use in the Shipping Services configuration.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippingEligible")]
        public virtual System.Nullable<bool> ShippingEligible { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A list of geotargets that defines the region area.</summary>
    public class RegionGeoTargetArea : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Required. A non-empty list of [location
        /// IDs](https://developers.google.com/adwords/api/docs/appendix/geotargeting). They must all be of the same
        /// location type (e.g., state).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("geotargetCriteriaIds")]
        public virtual System.Collections.Generic.IList<System.Nullable<long>> GeotargetCriteriaIds { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// A list of postal codes that defines the region area. Note: All regions defined using postal codes are accessible
    /// via the account's `ShippingSettings.postalCodeGroups` resource.
    /// </summary>
    public class RegionPostalCodeArea : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. A range of postal codes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("postalCodes")]
        public virtual System.Collections.Generic.IList<RegionPostalCodeAreaPostalCodeRange> PostalCodes { get; set; }

        /// <summary>Required. CLDR territory code or the country the postal code group applies to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("regionCode")]
        public virtual string RegionCode { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A range of postal codes that defines the region area.</summary>
    public class RegionPostalCodeAreaPostalCodeRange : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Required. A postal code or a pattern of the form prefix* denoting the inclusive lower bound of the range
        /// defining the area. Examples values: "94108", "9410*", "9*".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("begin")]
        public virtual string Begin { get; set; }

        /// <summary>
        /// Optional. A postal code or a pattern of the form prefix* denoting the inclusive upper bound of the range
        /// defining the area. It must have the same length as postalCodeRangeBegin: if postalCodeRangeBegin is a postal
        /// code then postalCodeRangeEnd must be a postal code too; if postalCodeRangeBegin is a pattern then
        /// postalCodeRangeEnd must be a pattern with the same prefix length. Optional: if not set, then the area is
        /// defined as being all the postal codes matching postalCodeRangeBegin.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual string End { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Regional inventory resource. contains the regional name and all attributes which are overridden for the
    /// specified region.
    /// </summary>
    public class RegionalInventory : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The availability of the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("availability")]
        public virtual string Availability { get; set; }

        /// <summary>
        /// A list of custom (merchant-provided) attributes. It can also be used for submitting any attribute of the
        /// feed specification in its generic form.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customAttributes")]
        public virtual System.Collections.Generic.IList<CustomAttribute> CustomAttributes { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#regionalInventory`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The price of the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("price")]
        public virtual Price Price { get; set; }

        /// <summary>The ID uniquely identifying each region.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("regionId")]
        public virtual string RegionId { get; set; }

        /// <summary>The sale price of the product. Mandatory if `sale_price_effective_date` is defined.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("salePrice")]
        public virtual Price SalePrice { get; set; }

        /// <summary>
        /// A date range represented by a pair of ISO 8601 dates separated by a space, comma, or slash. Both dates might
        /// be specified as 'null' if undecided.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("salePriceEffectiveDate")]
        public virtual string SalePriceEffectiveDate { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class RegionalinventoryCustomBatchRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The request entries to be processed in the batch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<RegionalinventoryCustomBatchRequestEntry> Entries { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A batch entry encoding a single non-batch regional inventory request.</summary>
    public class RegionalinventoryCustomBatchRequestEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>An entry ID, unique within the batch request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>The ID of the managing account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("merchantId")]
        public virtual System.Nullable<ulong> MerchantId { get; set; }

        /// <summary>Method of the batch request entry. Acceptable values are: - "`insert`" </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("method")]
        public virtual string Method { get; set; }

        /// <summary>The ID of the product for which to update price and availability.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productId")]
        public virtual string ProductId { get; set; }

        /// <summary>Price and availability of the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("regionalInventory")]
        public virtual RegionalInventory RegionalInventory { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class RegionalinventoryCustomBatchResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The result of the execution of the batch requests.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<RegionalinventoryCustomBatchResponseEntry> Entries { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#regionalinventoryCustomBatchResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A batch entry encoding a single non-batch regional inventory response.</summary>
    public class RegionalinventoryCustomBatchResponseEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the request entry this entry responds to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>
        /// A list of errors for failed custombatch entries. *Note:* Schema errors fail the whole request.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("errors")]
        public virtual Errors Errors { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#regionalinventoryCustomBatchResponseEntry`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>Price and availability of the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("regionalInventory")]
        public virtual RegionalInventory RegionalInventory { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The payload for configuring how the content should be rendered.</summary>
    public class RenderAccountIssuesRequestPayload : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Optional. How the detailed content should be returned. Default option is to return the content as a
        /// pre-rendered HTML text.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contentOption")]
        public virtual string ContentOption { get; set; }

        /// <summary>
        /// Optional. How actions with user input form should be handled. If not provided, actions will be returned as
        /// links that points merchant to Merchant Center where they can request the action.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userInputActionOption")]
        public virtual string UserInputActionOption { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Response containing support content and actions for listed account issues.</summary>
    public class RenderAccountIssuesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Alternate Dispute Resolution (ADR) is deprecated. Use `prerendered_out_of_court_dispute_settlement` instead.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("alternateDisputeResolution")]
        public virtual AlternateDisputeResolution AlternateDisputeResolution { get; set; }

        /// <summary>
        /// List of account issues for a given account. This list can be shown with compressed, expandable items. In the
        /// compressed form, the title and impact should be shown for each issue. Once the issue is expanded, the
        /// detailed content and available actions should be rendered.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("issues")]
        public virtual System.Collections.Generic.IList<AccountIssue> Issues { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The payload for configuring how the content should be rendered.</summary>
    public class RenderProductIssuesRequestPayload : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Optional. How the detailed content should be returned. Default option is to return the content as a
        /// pre-rendered HTML text.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("contentOption")]
        public virtual string ContentOption { get; set; }

        /// <summary>
        /// Optional. How actions with user input form should be handled. If not provided, actions will be returned as
        /// links that points merchant to Merchant Center where they can request the action.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userInputActionOption")]
        public virtual string UserInputActionOption { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Response containing support content and actions for listed product issues.</summary>
    public class RenderProductIssuesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Alternate Dispute Resolution (ADR) is deprecated. Use `prerendered_out_of_court_dispute_settlement` instead.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("alternateDisputeResolution")]
        public virtual AlternateDisputeResolution AlternateDisputeResolution { get; set; }

        /// <summary>
        /// List of issues for a given product. This list can be shown with compressed, expandable items. In the
        /// compressed form, the title and impact should be shown for each issue. Once the issue is expanded, the
        /// detailed content and available actions should be rendered.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("issues")]
        public virtual System.Collections.Generic.IList<ProductIssue> Issues { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Request to report interactions on a recommendation.</summary>
    public class ReportInteractionRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. Type of the interaction that is reported, for example INTERACTION_CLICK.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("interactionType")]
        public virtual string InteractionType { get; set; }

        /// <summary>Required. Token of the response when recommendation was returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("responseToken")]
        public virtual string ResponseToken { get; set; }

        /// <summary>
        /// Optional. Subtype of the recommendations this interaction happened on. This field must be set only to the
        /// value that is returned by {@link `RecommendationsService.GenerateRecommendations`} call.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("subtype")]
        public virtual string Subtype { get; set; }

        /// <summary>
        /// Required. Type of the recommendations on which this interaction happened. This field must be set only to the
        /// value that is returned by {@link `GenerateRecommendationsResponse`} call.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Result row returned from the search query.</summary>
    public class ReportRow : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Best sellers fields requested by the merchant in the query. Field values are only set if the merchant
        /// queries `BestSellersProductClusterView` or `BestSellersBrandView`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bestSellers")]
        public virtual BestSellers BestSellers { get; set; }

        /// <summary>
        /// Brand fields requested by the merchant in the query. Field values are only set if the merchant queries
        /// `BestSellersBrandView`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("brand")]
        public virtual Brand Brand { get; set; }

        /// <summary>
        /// Competitive visibility fields requested by the merchant in the query. Field values are only set if the
        /// merchant queries `CompetitiveVisibilityTopMerchantView`, `CompetitiveVisibilityBenchmarkView` or
        /// `CompetitiveVisibilityCompetitorView`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("competitiveVisibility")]
        public virtual CompetitiveVisibility CompetitiveVisibility { get; set; }

        /// <summary>
        /// Metrics requested by the merchant in the query. Metric values are only set for metrics requested explicitly
        /// in the query.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metrics")]
        public virtual Metrics Metrics { get; set; }

        /// <summary>
        /// Price competitiveness fields requested by the merchant in the query. Field values are only set if the
        /// merchant queries `PriceCompetitivenessProductView`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("priceCompetitiveness")]
        public virtual PriceCompetitiveness PriceCompetitiveness { get; set; }

        /// <summary>
        /// Price insights fields requested by the merchant in the query. Field values are only set if the merchant
        /// queries `PriceInsightsProductView`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("priceInsights")]
        public virtual PriceInsights PriceInsights { get; set; }

        /// <summary>
        /// Product cluster fields requested by the merchant in the query. Field values are only set if the merchant
        /// queries `BestSellersProductClusterView`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productCluster")]
        public virtual ProductCluster ProductCluster { get; set; }

        /// <summary>
        /// Product fields requested by the merchant in the query. Field values are only set if the merchant queries
        /// `ProductView`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productView")]
        public virtual ProductView ProductView { get; set; }

        /// <summary>
        /// Segmentation dimensions requested by the merchant in the query. Dimension values are only set for dimensions
        /// requested explicitly in the query.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("segments")]
        public virtual Segments Segments { get; set; }

        /// <summary>
        /// [Topic trends](https://support.google.com/merchants/answer/13542370) fields requested by the merchant in the
        /// query. Field values are only set if the merchant queries `TopicTrendsView`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("topicTrends")]
        public virtual TopicTrends TopicTrends { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Request message for the RequestPhoneVerification method.</summary>
    public class RequestPhoneVerificationRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Language code [IETF BCP 47 syntax](https://tools.ietf.org/html/bcp47) (for example, en-US). Language code is
        /// used to provide localized `SMS` and `PHONE_CALL`. Default language used is en-US if not provided.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("languageCode")]
        public virtual string LanguageCode { get; set; }

        /// <summary>Phone number to be verified.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("phoneNumber")]
        public virtual string PhoneNumber { get; set; }

        /// <summary>
        /// Required. Two letter country code for the phone number, for example `CA` for Canadian numbers. See the [ISO
        /// 3166-1 alpha-2](https://wikipedia.org/wiki/ISO_3166-1_alpha-2#Officially_assigned_code_elements) officially
        /// assigned codes.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("phoneRegionCode")]
        public virtual string PhoneRegionCode { get; set; }

        /// <summary>Verification method to receive verification code.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("phoneVerificationMethod")]
        public virtual string PhoneVerificationMethod { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Response message for the RequestPhoneVerification method.</summary>
    public class RequestPhoneVerificationResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The verification ID to use in subsequent calls to `verifyphonenumber`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("verificationId")]
        public virtual string VerificationId { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Request message for the RequestReviewFreeListings Program method.</summary>
    public class RequestReviewFreeListingsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The code [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) of the country for which
        /// review is to be requested.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("regionCode")]
        public virtual string RegionCode { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Request message for the RequestReviewShoppingAds program method.</summary>
    public class RequestReviewShoppingAdsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The code [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) of the country for which
        /// review is to be requested.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("regionCode")]
        public virtual string RegionCode { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Return policy online object. This is currently used to represent return policies for ads and free listings
    /// programs.
    /// </summary>
    public class ReturnPolicyOnline : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The countries of sale where the return policy is applicable. The values must be a valid 2 letter ISO 3166
        /// code, e.g. "US".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("countries")]
        public virtual System.Collections.Generic.IList<string> Countries { get; set; }

        /// <summary>
        /// The item conditions that are accepted for returns. This is required to not be empty unless the type of
        /// return policy is noReturns.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("itemConditions")]
        public virtual System.Collections.Generic.IList<string> ItemConditions { get; set; }

        /// <summary>
        /// The unique user-defined label of the return policy. The same label cannot be used in different return
        /// policies for the same country. Policies with the label 'default' will apply to all products, unless a
        /// product specifies a return_policy_label attribute.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("label")]
        public virtual string Label { get; set; }

        /// <summary>The name of the policy as shown in Merchant Center.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        /// <summary>The return policy.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("policy")]
        public virtual ReturnPolicyOnlinePolicy Policy { get; set; }

        /// <summary>
        /// The restocking fee that applies to all return reason categories. This would be treated as a free restocking
        /// fee if the value is not set.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("restockingFee")]
        public virtual ReturnPolicyOnlineRestockingFee RestockingFee { get; set; }

        /// <summary>
        /// The return methods of how customers can return an item. This value is required to not be empty unless the
        /// type of return policy is noReturns.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("returnMethods")]
        public virtual System.Collections.Generic.IList<string> ReturnMethods { get; set; }

        /// <summary>Output only. Return policy ID generated by Google.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("returnPolicyId")]
        public virtual string ReturnPolicyId { get; set; }

        /// <summary>The return policy uri. This can used by Google to do a sanity check for the policy.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("returnPolicyUri")]
        public virtual string ReturnPolicyUri { get; set; }

        /// <summary>
        /// The return reason category information. This required to not be empty unless the type of return policy is
        /// noReturns.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("returnReasonCategoryInfo")]
        public virtual System.Collections.Generic.IList<ReturnPolicyOnlineReturnReasonCategoryInfo> ReturnReasonCategoryInfo { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The available policies.</summary>
    public class ReturnPolicyOnlinePolicy : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The number of days items can be returned after delivery, where one day is defined to be 24 hours after the
        /// delivery timestamp. Required for `numberOfDaysAfterDelivery` returns.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("days")]
        public virtual System.Nullable<long> Days { get; set; }

        /// <summary>Policy type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The restocking fee. This can either be a fixed fee or a micro percent.</summary>
    public class ReturnPolicyOnlineRestockingFee : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Fixed restocking fee.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fixedFee")]
        public virtual PriceAmount FixedFee { get; set; }

        /// <summary>
        /// Percent of total price in micros. 15,000,000 means 15% of the total price would be charged.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("microPercent")]
        public virtual System.Nullable<int> MicroPercent { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The return reason category info wrapper.</summary>
    public class ReturnPolicyOnlineReturnReasonCategoryInfo : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The corresponding return label source. If the `ReturnMethod` field includes `BY_MAIL`, it is required to
        /// specify `ReturnLabelSource` for both `BUYER_REMORSE` and `ITEM_DEFECT` return reason categories.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("returnLabelSource")]
        public virtual string ReturnLabelSource { get; set; }

        /// <summary>The return reason category.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("returnReasonCategory")]
        public virtual string ReturnReasonCategory { get; set; }

        /// <summary>
        /// The corresponding return shipping fee. This is only applicable when returnLabelSource is not the customer's
        /// responsibility.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("returnShippingFee")]
        public virtual ReturnPolicyOnlineReturnShippingFee ReturnShippingFee { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// The return shipping fee. This can either be a fixed fee or a boolean to indicate that the customer pays the
    /// actual shipping cost.
    /// </summary>
    public class ReturnPolicyOnlineReturnShippingFee : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Fixed return shipping fee amount. This value is only applicable when type is FIXED. We will treat the return
        /// shipping fee as free if type is FIXED and this value is not set.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fixedFee")]
        public virtual PriceAmount FixedFee { get; set; }

        /// <summary>Type of return shipping fee.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class Row : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The list of cells that constitute the row. Must have the same length as `columnHeaders` for two-dimensional
        /// tables, a length of 1 for one-dimensional tables. Required.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cells")]
        public virtual System.Collections.Generic.IList<Value> Cells { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Request message for the ReportService.Search method.</summary>
    public class SearchRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Number of ReportRows to retrieve in a single page. Defaults to 1000. Values above 5000 are coerced to 5000.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageSize")]
        public virtual System.Nullable<int> PageSize { get; set; }

        /// <summary>
        /// Token of the page to retrieve. If not specified, the first page of results is returned. In order to request
        /// the next page of results, the value obtained from `next_page_token` in the previous response should be used.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageToken")]
        public virtual string PageToken { get; set; }

        /// <summary>
        /// Required. Query that defines performance metrics to retrieve and dimensions according to which the metrics
        /// are to be segmented. For details on how to construct your query, see the [Query Language
        /// guide](https://developers.google.com/shopping-content/guides/reports/query-language/overview).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("query")]
        public virtual string Query { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Response message for the ReportService.Search method.</summary>
    public class SearchResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Token which can be sent as `page_token` to retrieve the next page. If omitted, there are no subsequent
        /// pages.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        /// <summary>Rows that matched the search query.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("results")]
        public virtual System.Collections.Generic.IList<ReportRow> Results { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Dimensions according to which metrics are segmented in the response. Values of product dimensions, such as
    /// `offer_id`, reflect the state of a product at the time of the corresponding event, for example, impression or
    /// order. Segment fields cannot be selected in queries without also selecting at least one metric field. Values are
    /// only set for dimensions requested explicitly in the request's search query.
    /// </summary>
    public class Segments : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Brand of the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("brand")]
        public virtual string Brand { get; set; }

        /// <summary>
        /// [Product category (1st
        /// level)](https://developers.google.com/shopping-content/guides/reports/segmentation#category_and_product_type)
        /// in Google's product taxonomy.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categoryL1")]
        public virtual string CategoryL1 { get; set; }

        /// <summary>
        /// [Product category (2nd
        /// level)](https://developers.google.com/shopping-content/guides/reports/segmentation#category_and_product_type)
        /// in Google's product taxonomy.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categoryL2")]
        public virtual string CategoryL2 { get; set; }

        /// <summary>
        /// [Product category (3rd
        /// level)](https://developers.google.com/shopping-content/guides/reports/segmentation#category_and_product_type)
        /// in Google's product taxonomy.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categoryL3")]
        public virtual string CategoryL3 { get; set; }

        /// <summary>
        /// [Product category (4th
        /// level)](https://developers.google.com/shopping-content/guides/reports/segmentation#category_and_product_type)
        /// in Google's product taxonomy.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categoryL4")]
        public virtual string CategoryL4 { get; set; }

        /// <summary>
        /// [Product category (5th
        /// level)](https://developers.google.com/shopping-content/guides/reports/segmentation#category_and_product_type)
        /// in Google's product taxonomy.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("categoryL5")]
        public virtual string CategoryL5 { get; set; }

        /// <summary>
        /// Currency in which price metrics are represented, for example, if you select `ordered_item_sales_micros`, the
        /// returned value will be represented by this currency.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("currencyCode")]
        public virtual string CurrencyCode { get; set; }

        /// <summary>Custom label 0 for custom grouping of products.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customLabel0")]
        public virtual string CustomLabel0 { get; set; }

        /// <summary>Custom label 1 for custom grouping of products.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customLabel1")]
        public virtual string CustomLabel1 { get; set; }

        /// <summary>Custom label 2 for custom grouping of products.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customLabel2")]
        public virtual string CustomLabel2 { get; set; }

        /// <summary>Custom label 3 for custom grouping of products.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customLabel3")]
        public virtual string CustomLabel3 { get; set; }

        /// <summary>Custom label 4 for custom grouping of products.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customLabel4")]
        public virtual string CustomLabel4 { get; set; }

        /// <summary>
        /// Code of the country where the customer is located at the time of the event. Represented in the ISO 3166
        /// format. If the customer country cannot be determined, a special 'ZZ' code is returned.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customerCountryCode")]
        public virtual string CustomerCountryCode { get; set; }

        /// <summary>Date in the merchant timezone to which metrics apply.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("date")]
        public virtual Date Date { get; set; }

        /// <summary>Merchant-provided id of the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("offerId")]
        public virtual string OfferId { get; set; }

        /// <summary>
        /// [Product type (1st
        /// level)](https://developers.google.com/shopping-content/guides/reports/segmentation#category_and_product_type)
        /// in merchant's own product taxonomy.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productTypeL1")]
        public virtual string ProductTypeL1 { get; set; }

        /// <summary>
        /// [Product type (2nd
        /// level)](https://developers.google.com/shopping-content/guides/reports/segmentation#category_and_product_type)
        /// in merchant's own product taxonomy.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productTypeL2")]
        public virtual string ProductTypeL2 { get; set; }

        /// <summary>
        /// [Product type (3rd
        /// level)](https://developers.google.com/shopping-content/guides/reports/segmentation#category_and_product_type)
        /// in merchant's own product taxonomy.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productTypeL3")]
        public virtual string ProductTypeL3 { get; set; }

        /// <summary>
        /// [Product type (4th
        /// level)](https://developers.google.com/shopping-content/guides/reports/segmentation#category_and_product_type)
        /// in merchant's own product taxonomy.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productTypeL4")]
        public virtual string ProductTypeL4 { get; set; }

        /// <summary>
        /// [Product type (5th
        /// level)](https://developers.google.com/shopping-content/guides/reports/segmentation#category_and_product_type)
        /// in merchant's own product taxonomy.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("productTypeL5")]
        public virtual string ProductTypeL5 { get; set; }

        /// <summary>Program to which metrics apply, for example, Free Product Listing.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("program")]
        public virtual string Program { get; set; }

        /// <summary>Title of the product.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; }

        /// <summary>First day of the week (Monday) of the metrics date in the merchant timezone.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("week")]
        public virtual Date Week { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class Service : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A boolean exposing the active status of the shipping service. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("active")]
        public virtual System.Nullable<bool> Active { get; set; }

        /// <summary>
        /// The CLDR code of the currency to which this service applies. Must match that of the prices in rate groups.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("currency")]
        public virtual string Currency { get; set; }

        /// <summary>The CLDR territory code of the country to which the service applies. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deliveryCountry")]
        public virtual string DeliveryCountry { get; set; }

        /// <summary>Time spent in various aspects from order to the delivery of the product. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deliveryTime")]
        public virtual DeliveryTime DeliveryTime { get; set; }

        /// <summary>
        /// Eligibility for this service. Acceptable values are: - "`All scenarios`" - "`All scenarios except Shopping
        /// Actions`" - "`Shopping Actions`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("eligibility")]
        public virtual string Eligibility { get; set; }

        /// <summary>
        /// Minimum order value for this service. If set, indicates that customers will have to spend at least this
        /// amount. All prices within a service must have the same currency. Cannot be set together with
        /// minimum_order_value_table.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minimumOrderValue")]
        public virtual Price MinimumOrderValue { get; set; }

        /// <summary>
        /// Table of per store minimum order values for the pickup fulfillment type. Cannot be set together with
        /// minimum_order_value.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minimumOrderValueTable")]
        public virtual MinimumOrderValueTable MinimumOrderValueTable { get; set; }

        /// <summary>Free-form name of the service. Must be unique within target account. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        /// <summary>
        /// The carrier-service pair delivering items to collection points. The list of supported pickup services can be
        /// retrieved through the `getSupportedPickupServices` method. Required if and only if the service delivery type
        /// is `pickup`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pickupService")]
        public virtual PickupCarrierService PickupService { get; set; }

        /// <summary>
        /// Shipping rate group definitions. Only the last one is allowed to have an empty `applicableShippingLabels`,
        /// which means "everything else". The other `applicableShippingLabels` must not overlap.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rateGroups")]
        public virtual System.Collections.Generic.IList<RateGroup> RateGroups { get; set; }

        /// <summary>
        /// Type of locations this service ships orders to. Acceptable values are: - "`delivery`" - "`pickup`
        /// (deprecated)" - "`local_delivery`" - "`collection_point`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shipmentType")]
        public virtual string ShipmentType { get; set; }

        /// <summary>
        /// A list of stores your products are delivered from. This is only available for the local delivery shipment
        /// type.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeConfig")]
        public virtual ServiceStoreConfig StoreConfig { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Stores that provide local delivery. Only valid with local delivery fulfillment.</summary>
    public class ServiceStoreConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Time local delivery ends for the day. This can be either `local_cutoff_time` or `store_close_offset_hours`,
        /// if both are provided an error is thrown.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cutoffConfig")]
        public virtual ServiceStoreConfigCutoffConfig CutoffConfig { get; set; }

        /// <summary>Maximum delivery radius. Only needed for local delivery fulfillment type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("serviceRadius")]
        public virtual Distance ServiceRadius { get; set; }

        /// <summary>
        /// A list of store codes that provide local delivery. If empty, then `store_service_type` must be `all_stores`,
        /// or an error is thrown. If not empty, then `store_service_type` must be `selected_stores`, or an error is
        /// thrown.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeCodes")]
        public virtual System.Collections.Generic.IList<string> StoreCodes { get; set; }

        /// <summary>
        /// Indicates whether all stores listed by this merchant provide local delivery or not. Acceptable values are
        /// `all stores` and `selected stores`
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeServiceType")]
        public virtual string StoreServiceType { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Time local delivery ends for the day based on the local timezone of the store. `local_cutoff_time` and
    /// `store_close_offset_hours` are mutually exclusive.
    /// </summary>
    public class ServiceStoreConfigCutoffConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Time in hours and minutes in the local timezone when local delivery ends.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("localCutoffTime")]
        public virtual ServiceStoreConfigCutoffConfigLocalCutoffTime LocalCutoffTime { get; set; }

        /// <summary>
        /// Merchants can opt-out of showing n+1 day local delivery when they have a shipping service configured to n
        /// day local delivery. For example, if the shipping service defines same-day delivery, and it's past the
        /// cut-off, setting this field to `true` results in the calculated shipping service rate returning
        /// `NO_DELIVERY_POST_CUTOFF`. In the same example, setting this field to `false` results in the calculated
        /// shipping time being one day. This is only for local delivery.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("noDeliveryPostCutoff")]
        public virtual System.Nullable<bool> NoDeliveryPostCutoff { get; set; }

        /// <summary>
        /// Represents cutoff time as the number of hours before store closing. Mutually exclusive with other fields
        /// (hour and minute).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("storeCloseOffsetHours")]
        public virtual System.Nullable<long> StoreCloseOffsetHours { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Time in hours and minutes in the local timezone when local delivery ends.</summary>
    public class ServiceStoreConfigCutoffConfigLocalCutoffTime : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Hour local delivery orders must be placed by to process the same day.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hour")]
        public virtual System.Nullable<long> Hour { get; set; }

        /// <summary>Minute local delivery orders must be placed by to process the same day.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minute")]
        public virtual System.Nullable<long> Minute { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// The merchant account's shipping settings. All methods except getsupportedcarriers and getsupportedholidays
    /// require the admin role.
    /// </summary>
    public class ShippingSettings : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The ID of the account to which these account shipping settings belong. Ignored upon update, always present
        /// in get request responses.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountId")]
        public virtual System.Nullable<ulong> AccountId { get; set; }

        /// <summary>A list of postal code groups that can be referred to in `services`. Optional.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("postalCodeGroups")]
        public virtual System.Collections.Generic.IList<PostalCodeGroup> PostalCodeGroups { get; set; }

        /// <summary>The target account's list of services. Optional.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("services")]
        public virtual System.Collections.Generic.IList<Service> Services { get; set; }

        /// <summary>Optional. A list of warehouses which can be referred to in `services`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("warehouses")]
        public virtual System.Collections.Generic.IList<Warehouse> Warehouses { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ShippingsettingsCustomBatchRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The request entries to be processed in the batch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<ShippingsettingsCustomBatchRequestEntry> Entries { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A batch entry encoding a single non-batch shippingsettings request.</summary>
    public class ShippingsettingsCustomBatchRequestEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the account for which to get/update account shipping settings.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accountId")]
        public virtual System.Nullable<ulong> AccountId { get; set; }

        /// <summary>An entry ID, unique within the batch request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>The ID of the managing account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("merchantId")]
        public virtual System.Nullable<ulong> MerchantId { get; set; }

        /// <summary>The method of the batch entry. Acceptable values are: - "`get`" - "`update`" </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("method")]
        public virtual string Method { get; set; }

        /// <summary>The account shipping settings to update. Only defined if the method is `update`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippingSettings")]
        public virtual ShippingSettings ShippingSettings { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ShippingsettingsCustomBatchResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The result of the execution of the batch requests.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<ShippingsettingsCustomBatchResponseEntry> Entries { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#shippingsettingsCustomBatchResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A batch entry encoding a single non-batch shipping settings response.</summary>
    public class ShippingsettingsCustomBatchResponseEntry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the request entry to which this entry responds.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("batchId")]
        public virtual System.Nullable<long> BatchId { get; set; }

        /// <summary>
        /// A list of errors for failed custombatch entries. *Note:* Schema errors fail the whole request.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("errors")]
        public virtual Errors Errors { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#shippingsettingsCustomBatchResponseEntry`"
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The retrieved or updated account shipping settings.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippingSettings")]
        public virtual ShippingSettings ShippingSettings { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ShippingsettingsGetSupportedCarriersResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A list of supported carriers. May be empty.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("carriers")]
        public virtual System.Collections.Generic.IList<CarriersCarrier> Carriers { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#shippingsettingsGetSupportedCarriersResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ShippingsettingsGetSupportedHolidaysResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A list of holidays applicable for delivery guarantees. May be empty.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("holidays")]
        public virtual System.Collections.Generic.IList<HolidaysHoliday> Holidays { get; set; }

        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#shippingsettingsGetSupportedHolidaysResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ShippingsettingsGetSupportedPickupServicesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string
        /// "`content#shippingsettingsGetSupportedPickupServicesResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>A list of supported pickup services. May be empty.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pickupServices")]
        public virtual System.Collections.Generic.IList<PickupServicesPickupService> PickupServices { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class ShippingsettingsListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Identifies what kind of resource this is. Value: the fixed string "`content#shippingsettingsListResponse`".
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; }

        /// <summary>The token for the retrieval of the next page of shipping settings.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; }

        [Newtonsoft.Json.JsonPropertyAttribute("resources")]
        public virtual System.Collections.Generic.IList<ShippingSettings> Resources { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Response message for GetShoppingAdsProgramStatus.</summary>
    public class ShoppingAdsProgramStatus : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>State of the program. `ENABLED` if there are offers for at least one region.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("globalState")]
        public virtual string GlobalState { get; set; }

        /// <summary>
        /// Status of the program in each region. Regions with the same status and review eligibility are grouped
        /// together in `regionCodes`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("regionStatuses")]
        public virtual System.Collections.Generic.IList<ShoppingAdsProgramStatusRegionStatus> RegionStatuses { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Status of program and region.</summary>
    public class ShoppingAdsProgramStatusRegionStatus : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Date by which eligibilityStatus will go from `WARNING` to `DISAPPROVED`. Only visible when your
        /// eligibilityStatus is WARNING. In [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format: `YYYY-MM-DD`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("disapprovalDate")]
        public virtual string DisapprovalDate { get; set; }

        /// <summary>Eligibility status of the Shopping Ads program.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("eligibilityStatus")]
        public virtual string EligibilityStatus { get; set; }

        /// <summary>Issues that must be fixed to be eligible for review.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("onboardingIssues")]
        public virtual System.Collections.Generic.IList<string> OnboardingIssues { get; set; }

        /// <summary>
        /// The two-letter [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) codes for all the
        /// regions with the same `eligibilityStatus` and `reviewEligibility`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("regionCodes")]
        public virtual System.Collections.Generic.IList<string> RegionCodes { get; set; }

        /// <summary>
        /// If a program is eligible for review in a specific region. Only visible if `eligibilityStatus` is
        /// `DISAPPROVED`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reviewEligibilityStatus")]
        public virtual string ReviewEligibilityStatus { get; set; }

        /// <summary>Review ineligibility reason if account is not eligible for review.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reviewIneligibilityReason")]
        public virtual string ReviewIneligibilityReason { get; set; }

        /// <summary>
        /// Reason a program in a specific region isn’t eligible for review. Only visible if `reviewEligibilityStatus`
        /// is `INELIGIBLE`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reviewIneligibilityReasonDescription")]
        public virtual string ReviewIneligibilityReasonDescription { get; set; }

        /// <summary>
        /// Additional information for ineligibility. If `reviewIneligibilityReason` is `IN_COOLDOWN_PERIOD`, a
        /// timestamp for the end of the cooldown period is provided.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reviewIneligibilityReasonDetails")]
        public virtual ShoppingAdsProgramStatusReviewIneligibilityReasonDetails ReviewIneligibilityReasonDetails { get; set; }

        /// <summary>Issues evaluated in the review process. Fix all issues before requesting a review.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reviewIssues")]
        public virtual System.Collections.Generic.IList<string> ReviewIssues { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Additional details for review ineligibility reasons.</summary>
    public class ShoppingAdsProgramStatusReviewIneligibilityReasonDetails : Google.Apis.Requests.IDirectResponseSchema
    {
        private string _cooldownTimeRaw;

        private object _cooldownTime;

        /// <summary>
        /// This timestamp represents end of cooldown period for review ineligbility reason `IN_COOLDOWN_PERIOD`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cooldownTime")]
        public virtual string CooldownTimeRaw
        {
            get => _cooldownTimeRaw;
            set
            {
                _cooldownTime = Google.Apis.Util.Utilities.DeserializeForGoogleFormat(value);
                _cooldownTimeRaw = value;
            }
        }

        /// <summary><seealso cref="object"/> representation of <see cref="CooldownTimeRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnoreAttribute]
        [System.ObsoleteAttribute("This property is obsolete and may behave unexpectedly; please use CooldownTimeDateTimeOffset instead.")]
        public virtual object CooldownTime
        {
            get => _cooldownTime;
            set
            {
                _cooldownTimeRaw = Google.Apis.Util.Utilities.SerializeForGoogleFormat(value);
                _cooldownTime = value;
            }
        }

        /// <summary><seealso cref="System.DateTimeOffset"/> representation of <see cref="CooldownTimeRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnoreAttribute]
        public virtual System.DateTimeOffset? CooldownTimeDateTimeOffset
        {
            get => Google.Apis.Util.DiscoveryFormat.ParseGoogleDateTimeToDateTimeOffset(CooldownTimeRaw);
            set => CooldownTimeRaw = Google.Apis.Util.DiscoveryFormat.FormatDateTimeOffsetToGoogleDateTime(value);
        }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class Table : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Headers of the table's columns. Optional: if not set then the table has only one dimension.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("columnHeaders")]
        public virtual Headers ColumnHeaders { get; set; }

        /// <summary>Name of the table. Required for subtables, ignored for the main table.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        /// <summary>Headers of the table's rows. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rowHeaders")]
        public virtual Headers RowHeaders { get; set; }

        /// <summary>
        /// The list of rows that constitute the table. Must have the same length as `rowHeaders`. Required.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rows")]
        public virtual System.Collections.Generic.IList<Row> Rows { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Block of text that may contain a tooltip with more information.</summary>
    public class TextWithTooltip : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Value of the tooltip as a simple text.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("simpleTooltipValue")]
        public virtual string SimpleTooltipValue { get; set; }

        /// <summary>Value of the message as a simple text.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("simpleValue")]
        public virtual string SimpleValue { get; set; }

        /// <summary>The suggested type of an icon for tooltip, if a tooltip is present.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("tooltipIconStyle")]
        public virtual string TooltipIconStyle { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A message that represents a time period.</summary>
    public class TimePeriod : Google.Apis.Requests.IDirectResponseSchema
    {
        private string _endTimeRaw;

        private object _endTime;

        /// <summary>The ending timestamp.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("endTime")]
        public virtual string EndTimeRaw
        {
            get => _endTimeRaw;
            set
            {
                _endTime = Google.Apis.Util.Utilities.DeserializeForGoogleFormat(value);
                _endTimeRaw = value;
            }
        }

        /// <summary><seealso cref="object"/> representation of <see cref="EndTimeRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnoreAttribute]
        [System.ObsoleteAttribute("This property is obsolete and may behave unexpectedly; please use EndTimeDateTimeOffset instead.")]
        public virtual object EndTime
        {
            get => _endTime;
            set
            {
                _endTimeRaw = Google.Apis.Util.Utilities.SerializeForGoogleFormat(value);
                _endTime = value;
            }
        }

        /// <summary><seealso cref="System.DateTimeOffset"/> representation of <see cref="EndTimeRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnoreAttribute]
        public virtual System.DateTimeOffset? EndTimeDateTimeOffset
        {
            get => Google.Apis.Util.DiscoveryFormat.ParseGoogleDateTimeToDateTimeOffset(EndTimeRaw);
            set => EndTimeRaw = Google.Apis.Util.DiscoveryFormat.FormatDateTimeOffsetToGoogleDateTime(value);
        }

        private string _startTimeRaw;

        private object _startTime;

        /// <summary>The starting timestamp.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startTime")]
        public virtual string StartTimeRaw
        {
            get => _startTimeRaw;
            set
            {
                _startTime = Google.Apis.Util.Utilities.DeserializeForGoogleFormat(value);
                _startTimeRaw = value;
            }
        }

        /// <summary><seealso cref="object"/> representation of <see cref="StartTimeRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnoreAttribute]
        [System.ObsoleteAttribute("This property is obsolete and may behave unexpectedly; please use StartTimeDateTimeOffset instead.")]
        public virtual object StartTime
        {
            get => _startTime;
            set
            {
                _startTimeRaw = Google.Apis.Util.Utilities.SerializeForGoogleFormat(value);
                _startTime = value;
            }
        }

        /// <summary><seealso cref="System.DateTimeOffset"/> representation of <see cref="StartTimeRaw"/>.</summary>
        [Newtonsoft.Json.JsonIgnoreAttribute]
        public virtual System.DateTimeOffset? StartTimeDateTimeOffset
        {
            get => Google.Apis.Util.DiscoveryFormat.ParseGoogleDateTimeToDateTimeOffset(StartTimeRaw);
            set => StartTimeRaw = Google.Apis.Util.DiscoveryFormat.FormatDateTimeOffsetToGoogleDateTime(value);
        }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Represents a time zone from the [IANA Time Zone Database](https://www.iana.org/time-zones).</summary>
    public class TimeZone : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>IANA Time Zone Database time zone. For example "America/New_York".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; }

        /// <summary>Optional. IANA Time Zone Database version number. For example "2019a".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual string Version { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Topic trends fields requested by the merchant in the query. Field values are only set if the merchant queries
    /// `TopicTrendsView`. Forecast data can be queried up to 13 weeks by passing a future date in the `date` field.
    /// Historical data is measured daily, and forecasted data is projected weekly. All data points are normalized based
    /// on the highest data points returned in the response. If you make separate queries with different date ranges,
    /// you might see different values for the same date in each response. The recommended way to get a trend score of a
    /// topic is `last7_days_search_interest / last{$day}_days_search_interest - 1`. You can view trends for up to eight
    /// topics at a time.
    /// </summary>
    public class TopicTrends : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Country trends are calculated for. Must be a two-letter country code (ISO 3166-1-alpha-2 code), for example,
        /// `“US”`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("customerCountryCode")]
        public virtual string CustomerCountryCode { get; set; }

        /// <summary>Date the trend score was retrieved.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("date")]
        public virtual Date Date { get; set; }

        /// <summary>
        /// Search interest in the last 120 days, with the same normalization as search_interest. This field is only
        /// present for a past date.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("last120DaysSearchInterest")]
        public virtual System.Nullable<double> Last120DaysSearchInterest { get; set; }

        /// <summary>
        /// Search interest in the last 30 days, with the same normalization as search_interest. This field is only
        /// present for a past date.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("last30DaysSearchInterest")]
        public virtual System.Nullable<double> Last30DaysSearchInterest { get; set; }

        /// <summary>
        /// Search interest in the last 7 days, with the same normalization as search_interest. This field is only
        /// present for a past date.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("last7DaysSearchInterest")]
        public virtual System.Nullable<double> Last7DaysSearchInterest { get; set; }

        /// <summary>
        /// Search interest in the last 90 days, with the same normalization as search_interest. This field is only
        /// present for a past date.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("last90DaysSearchInterest")]
        public virtual System.Nullable<double> Last90DaysSearchInterest { get; set; }

        /// <summary>
        /// Estimated search interest in the next 7 days, with the same normalization as search_interest. This field is
        /// only present for a future date.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("next7DaysSearchInterest")]
        public virtual System.Nullable<double> Next7DaysSearchInterest { get; set; }

        /// <summary>
        /// Daily search interest, normalized to the time and country to make comparisons easier, with 100 representing
        /// peak popularity (from 0 to 100) for the requested time period and location.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("searchInterest")]
        public virtual System.Nullable<double> SearchInterest { get; set; }

        /// <summary>
        /// Google-provided topic trends are calculated for. Only top eight topics are returned. Topic is what shoppers
        /// are searching for on Google, grouped by the same concept.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("topic")]
        public virtual string Topic { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class TransitTable : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// A list of postal group names. The last value can be `"all other locations"`. Example: `["zone 1", "zone 2",
        /// "all other locations"]`. The referred postal code groups must match the delivery country of the service.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("postalCodeGroupNames")]
        public virtual System.Collections.Generic.IList<string> PostalCodeGroupNames { get; set; }

        [Newtonsoft.Json.JsonPropertyAttribute("rows")]
        public virtual System.Collections.Generic.IList<TransitTableTransitTimeRow> Rows { get; set; }

        /// <summary>
        /// A list of transit time labels. The last value can be `"all other labels"`. Example: `["food", "electronics",
        /// "all other labels"]`.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("transitTimeLabels")]
        public virtual System.Collections.Generic.IList<string> TransitTimeLabels { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class TransitTableTransitTimeRow : Google.Apis.Requests.IDirectResponseSchema
    {
        [Newtonsoft.Json.JsonPropertyAttribute("values")]
        public virtual System.Collections.Generic.IList<TransitTableTransitTimeRowTransitTimeValue> Values { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class TransitTableTransitTimeRowTransitTimeValue : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Must be greater than or equal to `minTransitTimeInDays`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxTransitTimeInDays")]
        public virtual System.Nullable<long> MaxTransitTimeInDays { get; set; }

        /// <summary>
        /// Transit time range (min-max) in business days. 0 means same day delivery, 1 means next day delivery.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minTransitTimeInDays")]
        public virtual System.Nullable<long> MinTransitTimeInDays { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>The payload for the triggered action.</summary>
    public class TriggerActionPayload : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Required. The context from the selected action. The value is obtained from rendered issues and needs to be
        /// sent back to identify the action that is being triggered.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("actionContext")]
        public virtual string ActionContext { get; set; }

        /// <summary>Required. Input provided by the merchant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("actionInput")]
        public virtual ActionInput ActionInput { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Response informing about the started action.</summary>
    public class TriggerActionResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The message for merchant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("message")]
        public virtual string Message { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Request message for the UndeleteConversionSource method.</summary>
    public class UndeleteConversionSourceRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// Specifications related to the `Checkout` URL. The `UriTemplate` is of the form
    /// `https://www.mystore.com/checkout?item_id={id}` where `{id}` will be automatically replaced with data from the
    /// merchant account with this attribute
    /// [offer_id](https://developers.google.com/shopping-content/reference/rest/v2.1/products#Product.FIELDS.offer_id)
    /// </summary>
    public class UrlSettings : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// URL template when the placeholders are expanded will redirect the buyer to the cart page on the merchant
        /// website with the selected item in cart.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cartUriTemplate")]
        public virtual string CartUriTemplate { get; set; }

        /// <summary>
        /// URL template when the placeholders are expanded will redirect the buyer to the merchant checkout page with
        /// the item in the cart.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("checkoutUriTemplate")]
        public virtual string CheckoutUriTemplate { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>
    /// The single value of a rate group or the value of a rate group table's cell. Exactly one of `noShipping`,
    /// `flatRate`, `pricePercentage`, `carrierRateName`, `subtableName` must be set.
    /// </summary>
    public class Value : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// The name of a carrier rate referring to a carrier rate defined in the same rate group. Can only be set if
        /// all other fields are not set.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("carrierRateName")]
        public virtual string CarrierRateName { get; set; }

        /// <summary>A flat rate. Can only be set if all other fields are not set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("flatRate")]
        public virtual Price FlatRate { get; set; }

        /// <summary>
        /// If true, then the product can't ship. Must be true when set, can only be set if all other fields are not
        /// set.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("noShipping")]
        public virtual System.Nullable<bool> NoShipping { get; set; }

        /// <summary>
        /// A percentage of the price represented as a number in decimal notation (for example, `"5.4"`). Can only be
        /// set if all other fields are not set.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pricePercentage")]
        public virtual string PricePercentage { get; set; }

        /// <summary>
        /// The name of a subtable. Can only be set in table cells (not for single values), and only if all other fields
        /// are not set.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("subtableName")]
        public virtual string SubtableName { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Request message for the VerifyPhoneNumber method.</summary>
    public class VerifyPhoneNumberRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Verification method used to receive verification code.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("phoneVerificationMethod")]
        public virtual string PhoneVerificationMethod { get; set; }

        /// <summary>The verification code that was sent to the phone number for validation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("verificationCode")]
        public virtual string VerificationCode { get; set; }

        /// <summary>The verification ID returned by `requestphoneverification`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("verificationId")]
        public virtual string VerificationId { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>Response message for the VerifyPhoneNumber method.</summary>
    public class VerifyPhoneNumberResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Verified phone number if verification is successful. This phone number can only be replaced by another
        /// verified phone number.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("verifiedPhoneNumber")]
        public virtual string VerifiedPhoneNumber { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    /// <summary>A fulfillment warehouse, which stores and handles inventory.</summary>
    public class Warehouse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Business days of the warehouse. If not set, will be Monday to Friday by default.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("businessDayConfig")]
        public virtual BusinessDayConfig BusinessDayConfig { get; set; }

        /// <summary>
        /// Required. The latest time of day that an order can be accepted and begin processing. Later orders will be
        /// processed in the next day. The time is based on the warehouse postal code.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cutoffTime")]
        public virtual WarehouseCutoffTime CutoffTime { get; set; }

        /// <summary>
        /// Required. The number of days it takes for this warehouse to pack up and ship an item. This is on the
        /// warehouse level, but can be overridden on the offer level based on the attributes of an item.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("handlingDays")]
        public virtual System.Nullable<long> HandlingDays { get; set; }

        /// <summary>Required. The name of the warehouse. Must be unique within account.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; }

        /// <summary>Required. Shipping address of the warehouse.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shippingAddress")]
        public virtual Address ShippingAddress { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class WarehouseBasedDeliveryTime : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Required. Carrier, such as `"UPS"` or `"Fedex"`. The list of supported carriers can be retrieved through the
        /// `listSupportedCarriers` method.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("carrier")]
        public virtual string Carrier { get; set; }

        /// <summary>
        /// Required. Carrier service, such as `"ground"` or `"2 days"`. The list of supported services for a carrier
        /// can be retrieved through the `listSupportedCarriers` method. The name of the service must be in the
        /// eddSupportedServices list.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("carrierService")]
        public virtual string CarrierService { get; set; }

        /// <summary>Shipping origin's state.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("originAdministrativeArea")]
        public virtual string OriginAdministrativeArea { get; set; }

        /// <summary>Shipping origin's city.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("originCity")]
        public virtual string OriginCity { get; set; }

        /// <summary>
        /// Shipping origin's country represented as a [CLDR territory
        /// code](https://github.com/unicode-org/cldr/blob/latest/common/main/en.xml).
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("originCountry")]
        public virtual string OriginCountry { get; set; }

        /// <summary>Shipping origin.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("originPostalCode")]
        public virtual string OriginPostalCode { get; set; }

        /// <summary>Shipping origin's street address.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("originStreetAddress")]
        public virtual string OriginStreetAddress { get; set; }

        /// <summary>
        /// The name of the warehouse. Warehouse name need to be matched with name. If warehouseName is set, the below
        /// fields will be ignored. The warehouse info will be read from warehouse.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("warehouseName")]
        public virtual string WarehouseName { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class WarehouseCutoffTime : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>
        /// Required. Hour (24-hour clock) of the cutoff time until which an order has to be placed to be processed in
        /// the same day by the warehouse. Hour is based on the timezone of warehouse.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hour")]
        public virtual System.Nullable<int> Hour { get; set; }

        /// <summary>
        /// Required. Minute of the cutoff time until which an order has to be placed to be processed in the same day by
        /// the warehouse. Minute is based on the timezone of warehouse.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minute")]
        public virtual System.Nullable<int> Minute { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }

    public class Weight : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The weight unit. Acceptable values are: - "`kg`" - "`lb`" </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("unit")]
        public virtual string Unit { get; set; }

        /// <summary>
        /// Required. The weight represented as a number. The weight can have a maximum precision of four decimal
        /// places.
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; }

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }
}
